Bonjour,
Alors voilà, j'ai un soucis
je veux faire une insertion multiple en base, exemple :
voilà, ça c'est l'exemple simple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 INSERT table1 (col1, col2) VALUES ('val1', 'val'2'); INSERT table2 (col3, col4) VALUES ('tutu', 'cool');
Donc mon problème, c'est que j'aimerais jouer ces 2 requêtes en même temps.
J'ai bien la solution porcho de concaténer les 2 requêtes dans un String et créer un Statement simple avec ce String. Ca marche, c'est pas mal.
Mais le hic, c'est que je fais mes tests avec des caractères simples pour l'instant, pas de guillemet.
Donc je me suis dis, fais PreparedStatement, mais est-ce que le PreparedStatement va aimer ce genre de requête :
si oui, bah il ne me reste plus qu'à collecter les informations dans le bon ordre pour lui donner a bouffer...mais bon, sachant que je construit les différentes requêtes à imbriquer de manière dynamique, c'est pas forcément le plus simple pour conserver l'ordre des paramètres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 INSERT table1 (col1, col2) VALUES (?, ?); INSERT table2 (col3, col4) VALUES (?, ?);
Sinon j'ai vu l'histoire des batchs, mais il semblerait qu'avec la base H2 et les PreparedStatement, ça ne fonctionne pas.
Bon sinon finalement ma question c'est, est-ce que je peux faire qq chose comme ça :
est-ce que ça, c'est jouable et moins porcho que la première solution, (vu que ça gère les accents surtout) ?
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 PreparedStatement prep = null; connection.setAutoCommit(false); //première requête générée dynamiquement String ma_premiere_query = ...; prep = connection.prepareStatement(ma_premiere_query); prep.setInt(1, ...); ... prep.execute(); //deuxième requête générée dynamiquement String ma_deuxieme_query = ...; prep = connection.prepareStatement(ma_deuxieme_query); prep.setInt(1, ...); ... prep.execute(); connection.commit(); connection.setAutoCommit(true);
(je sais que je pourrais tester, mais ça permet de créer une discussion sur le sujet si la solution envisagée n'est pas possible )
Partager