[JDBC] plusieurs requêtes ne passent pas ensemble
Bonjour,
j'ai cette erreur qui apparait à l'execution de cette fonction
Source not found for AbstractJdbc2Statement$StatementResultHandler.handleCompletion() line: 204
Voici la fonction. La reûête d'insertion marche très bien toute seule, mais dès que j'ajoute la requête de recherche des doublons, ca ne amrche plus avec l'erreur ci dessus...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| private boolean readDataFile(FormFile input, Connection con){
InputStream is;
DataInputStream dis;
String line;
try { System.out.println("rentre le try");
is = input.getInputStream();
dis = new DataInputStream(is);
String query = new String("INSERT into meteo_data2 ( grid_mdata," +
" day_mdata, max_temp_mdata, min_temp_mdata, rainfall_mdata, e0_mdata, " +
" es0_mdata, et0_mdata, radiation_mdata) values (");
Statement stmt = con.createStatement();
String verifDoublon = new String ("SELECT id_mdata from meteo_data2 where grid_mdata='");
while ((line = dis.readLine()) != null){
String[] param= line.split(",");
// recherche de doublons relatifs dans la table meteo_data
verifDoublon += param[0] + " ' and day_mdata='" + param[1]+ "';";
System.out.println(verifDoublon);
ResultSet rs = stmt.executeQuery(verifDoublon);
System.out.println("apres");
// insertion des données
query += ("' "+ param[0] + " '");
for (int i=1; i <param.length; i++){
query += (" ,' "+ param[i] +" ' ");
}
query += (");");
System.out.println(query);
stmt.executeUpdate(query);
query = new String("INSERT into meteo_data2 ( grid_mdata," +
" day_mdata, max_temp_mdata, min_temp_mdata, rainfall_mdata, e0_mdata, " +
"es0_mdata, et0_mdata, radiation_mdata) values (");
}
stmt.execute("COMMIT;");
}
catch (SQLException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
return true;
} |
Pouvez-vous m'aidez ?
Merci d'avance.
Re: [JDBC] plusieurs requêtes ne passent pas ensemble
Bonjour, pourrais-tu nous dire s'il exécute au moins une fois la boucle ?
Et est-ce que la requête que tu construis et met dans verifDoublon est une requête valide ?
Qu'affiche-t-il lors dy sysout verifDoublon et query ?
Sinon, sans trop savoir dans quel cadre tu compte utiliser ton programme, je ne peux que te conseiller d'utiliser des PreparedStatement au lieu de Statement, et de bien veiller à fermer les resultset et les statements. au bon endroit.
Je n'arrive même pas à comprendre que cela puisse fonctionner comme il faut avec le insert. Car les DataInputStream sont généralement utilisé pour lire des objets ou primitives qui ont été sérialisés, et non pour lire des fichiers textes. Il vaut mieux utiliser un Reader pour cela. Voir la javadoc de DataInputStream et de la méthode readLine.
Si tu veux plus d'explications quant à la raison de PrepareStatement au lieu de Statement, fais le savoir.