IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

sql insert list


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut sql insert list
    Bonjour,

    J'aurai une petite question sur les insert.

    J'utilise QueryRunner qui simplifie l'exécution des requête.

    Je développe un batch.

    Dans un fichier properties, j'ai une requête qui ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete.operation = insert into operations (ope_id,ope_num_operation) select ope_id, ope_num_operation from operation where date between ? and ?)
    En Java, j'utilise la méthode update de la classe QueryRunner
    update(Connection connection, String sql, Objet[] param)
    Le ? est remplacé par les élements du tableau param.

    Ma question est que j'ai remplacé ma requête par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete.operation = insert into operations (ope_id,ope_num_operation) ?
    ? serait remplacé par une liste en Java.

    Je sais pas si c'est possible ???

    En gros, je récupère le résultat du "select ope_id, ope_num_operation from operation where date between ? and ?" dans une arrayList.
    et ensuite j'injecte cette liste dans la requête suivante : insert into operations (ope_id,ope_num_operation) ?

    Vous allez me dire pourquoi me prendre la tête sur ça, mais là j'ai simplifié, la requête que je veux stocker dans une liste est assez complexe, et j'aimerai gérér ça en Java, car j'ai des traitement à faire sur ses données.

    Sinon une autre solution, serait de parcourir la liste et faire un insert sur chaque élement.

    En gros, au lieu de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For (liste.size) {
     
    insert into operation (ope_id) values (list.get(0))
     
    }
    j'aimerai faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into operation (ope_id) (liste)

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    même pb avec un select:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    requete.recherche.OPERATION.CODEREGROUPEMENT = select ope_code_regroupement from operation where eca_id_standard = 3 and cli_id_standard = 1109 and ope_num_operation != ope_code_regroupement
     
    requete.recherche.OPERATION.ETAPE = select ope_id, ope_num_operation from operation where ope_code_regroupement exists ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    List resultatOperationSimple = null;
    		List resultatOperationCodeRegroupement = null;
    		List resultatOperationEtape = null;
     
    		try {
    			resultatOperationSimple = selectOperations(getRequest("requete.recherche.OPERATION.SIMPLE"));
    			resultatOperationCodeRegroupement = selectOperations(getRequest("requete.recherche.OPERATION.CODEREGROUPEMENT"));
    			resultatOperationEtape = selectOperations(getRequest("requete.recherche.OPERATION.ETAPE"),resultatOperationCodeRegroupement);
    			Iterator ItlisteOperation = resultatOperationEtape.iterator();
    			while(ItlisteOperation.hasNext()){
    					Object data[] = (Object[]) ItlisteOperation.next();
    					System.out.println("\t"+data[0]+" -> "+data[1]);
    			}
     
    		}
    		catch (BatchServiceException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    	private List selectOperations(String reqName, List resultatOperation) throws BatchServiceException
    	{
    		List ret = null;
    		List temp = new ArrayList();
    		for (int i = 0; i < resultatOperation.size(); i++) {
    			Object data[] = (Object[]) resultatOperation.get(i);
    			System.out.println(data[0]);
    			temp.add(data[0]);
    		}
    		Object[] parametres = temp.toArray();
    		System.out.println(parametres[0]);
    		List obj = (List)execSelect(reqName,parametres, new ArrayListHandler());
    		if (obj != null)
    		{
    			ret = (List) obj;
    		}
    		return ret;
    	}
    En éxécutant mon code, il me sort ça :


    Caused by: java.sql.SQLException: Index de colonne non valide Query: select ope_id, ope_num_operation from operation where ope_code_regroupement exists ? Parameters: [0123090108C00016, 0123090108C00014, 0123090109C00006, 0123090112C00001, 0123090114C00013, 0123090114C00014, 0123090115C00002, 0123090115C00003, 0123090116C00005, 0123090116C00006, 0123090120C00003, 0123090122C00021, 0123090121C00008, 0123090121C00009, 0123090123C00010, 0123090127C00015, 0123090128C00011, 0123090128C00015, 0123090129C00001, 0123090130C00010, 0123090204C00016, 0123090205C00001, 0123090206C00006, 0123090211C00002, 0123090212C00009, 0123090210C00002, 0123090213C00011, 0123090212C00008, 0123090219C00002, 0123090218C00005, 0123090220C00002, 0123090223C00003, 0123090220C00003, 0123090225C00008, 0123090224C00016, 0123090226C00005, 0123090227C00003, 0123090304C00003, 0123090305C00015, 0123090309C00013, 0123090306C00008, 0123090310C00004, 0123090313C00009, 0123090311C00003, 0123090312C00006, 0123090313C00008, 0123090316C00008, 0123090317C00012, 0123090319C00010, 0123090318C00003, 0123090318C00005, 0123090320C00020, 0123090323C00018, 0123090325C00015, 0123090326C00009, 0123090401C00006, 0123090330C00002, 0123090401C00005, 0123090406C00004, 0123090406C00003, 0123090403C00004, 0123090402C00010, 0123090409C00005, 0123090407C00004, 0123090409C00004, 0123090408C00003, 0123090414C00004, 0123090409C00078, 0123090415C00007, 0123090416C00004, 0123090420C00007, 0123090420C00006, 0123090421C00004, 0123090424C00003, 0123090422C00004, 0123090423C00003, 0123090422C00003, 0123090427C00003, 0123090428C00007, 0123090429C00004, 0123090430C00004, 0123090429C00003, 0123090504C00003, 0123090505C00003, 0123090504C00004, 0123090506C00021, 0123090507C00011, 0123090507C00018, 0123090511C00004]


  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    après moult recherche & test !!

    je m'aperçois qu'il est impossible de passer une liste d'élement à la requête.

    En passant qu'un élément ça passe, mais une liste non!!

    donc pour les insert, je serai obligé de faire une boucle sur une liste de résultat et faire un insert

    for (liste.size()) {

    insert into table value (liste.get(0)

    }

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Quel est votre SGBD ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    Oracle 10g

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Lisez ce document, le lien vient de mnitu :
    http://method-r.com/downloads/doc_do...e-cary-millsap

    Un exemple avec du Java, vous n'avez qu'à faire un copier-coller-adapter !

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    d'après ce que j'ai vu du fichier,
    il boucle et exécute une requete à chaque boucle...

    merci

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Pas tout à fait, il démontre l'énorme utilité des prepared statement combinés aux binds variables.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    oui exactement, c'est ça que je vais réaliser !!

    J'avais ouvert un autre sujet sur le connect by.

    En gros, je parcours le resultset, et je réalise mes traitements pour chaque éléments !!

    merci en tout cas pour les infos sur les 2 sujets !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/09/2005, 16h41
  2. Multiplier les And dans Sql Insert Into
    Par samlepiratepaddy dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 23/09/2005, 22h55
  3. Réponses: 4
    Dernier message: 30/01/2005, 15h23
  4. SQL 2000 - Liste + taille des tables et index
    Par Fox dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/03/2004, 16h59
  5. erreur SQL ...INSERT INTO
    Par naidinp dans le forum ASP
    Réponses: 20
    Dernier message: 18/09/2003, 12h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo