Operation not allowed after ResultSet closed
Hind4Dev
Messages postés
2
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
j'ai deux méthodes d'insertion dans une bdd qui génère l'exception "Oparation not allowed after ResultSet closed" que voici, alors qu'on a besoin de mettre stat.close():
@SuppressWarnings("deprecation")
public void insertEtudiant() throws Exception{
try{
int codeLieu = getLieu();
int codeNat = getNat();
String codeF = getFiliere();
int codeMotif = getMotif();
String query = "INSERT INTO etudiant (bac,nom,prenom,genre,adresse,n_phone,mail,n_ccp,decision,bloque,"
+ "n_ins,annee__encours,annee_univ,annee_courante,reste,"
+ "an_1,an_2,an_3,an_4,an_5,an_6,an_7,an_8,an_9,an_10,"
+ "cycle,nbr_annee,code_f,date_nais,code,code_nat,Observation,date_bloc,code_motif) "
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
stat = cnx.prepareStatement(query);
stat.setString(1, txtBAC.getText());
stat.setString(2, txtNom.getText());
stat.setString(3, txtPrenom.getText());
stat.setString(4, genre);
stat.setString(5, txtAdr.getText());
stat.setString(6, txtPhone.getText());
stat.setString(7, txtMail.getText());
stat.setString(8, (String)txtCCP.getValue());
stat.setString(9, txtDec.getText());
stat.setBoolean(10, bloc);
stat.setString(11, txtIns.getText());
stat.setString(12, txtAn.getText());
stat.setString(13, txtUniv.getText());
stat.setInt(14,new java.sql.Date(System.currentTimeMillis()).getYear());
stat.setInt(15, reste);
//stat.setInt(6, rds);
stat.setInt(16, 0);
stat.setInt(17, 0);
stat.setInt(18, 0);
stat.setInt(19, 0);
stat.setInt(20, 0);
stat.setInt(21, 0);
stat.setInt(22, 0);
stat.setInt(23, 0);
stat.setInt(24, 0);
stat.setInt(25, 0);
stat.setString(26,txtBAC.getText());
stat.setString(27, codeF);
stat.setString(28, cycle);
stat.setString(29, ((JTextField) dateChooser.getDateEditor().getUiComponent()).getText());
stat.setInt(30, codeLieu);
stat.setInt(31, codeNat);
//stat.setInt(14, codePhoto);
stat.setString(32, txtObs.getText());
stat.setDate(33,new java.sql.Date(System.currentTimeMillis()));
stat.setInt(34, codeMotif);
stat.execute();
}catch(SQLException ex){
JOptionPane.showMessageDialog(null,"Problème insertEtudiant");
}
finally{
stat.close();
}
}
public void insertFils() throws SQLException{
try{
int codeP = insertPere();
int codeM = insertMere();
String query = "INSERT INTO fils_de (bac,code_p,code_m) VALUES (?,?,?)";
stat = cnx.prepareStatement(query);
stat.setString(1,txtBAC.getText());
stat.setInt(2, codeP);
stat.setInt(3, codeM);
stat.execute();
}catch(Exception ex){
JOptionPane.showMessageDialog(null, "Problème insertFils");
}
finally{
stat.close();
}
}
A voir également:
- Java.sql.sqlexception: operation not allowed after resultset closed
- Msi after - Télécharger - Optimisation
- Could not connect to server - Forum TV & Vidéo
- L'opération demandée nécessite une élévation ✓ - Forum LibreOffice / OpenOffice
- Not able to play iron tv ✓ - Forum TV & Vidéo
- L'opération demandée nécessite une élévation. ✓ - Forum LibreOffice / OpenOffice
2 réponses
J'ai l'impression qu'il faut utiliser la méthode .executeUpdate() et non pas .execute().
------------------------------------------------------------------------------------
"La peur mène à la colère. La colère mène à la haine. Et la haine ... mène à la souffrance." - Yoda
------------------------------------------------------------------------------------
"La peur mène à la colère. La colère mène à la haine. Et la haine ... mène à la souffrance." - Yoda
Hind4Dev
Messages postés
2
Statut
Membre
c'est ce que j'avais fait auparavant mais il n'est pas là le problème
Bonjour, S'il vous plait, Merci... Ce sont des mots plus qu'appréciés quand on pose un message sur un forum, nous ne sommes pas des robots !
Quant au problème il faudrait voir où se trouve l'erreur (quelle ligne de code) mais tu utilises probablement deux fois le même statement pour deux requêtes distinctes, peut-être à ce niveau là :
Pour éviter ça tu dois créer un nouveau statement pour chaque requête et le meilleur moyen d'y arriver est de ne pas utiliser un attribut de classe transverse à toute la classe mais d'en spécifier un nouveau dans chaque méthode.
Quant au problème il faudrait voir où se trouve l'erreur (quelle ligne de code) mais tu utilises probablement deux fois le même statement pour deux requêtes distinctes, peut-être à ce niveau là :
int codeP = insertPere(); int codeM = insertMere();
Pour éviter ça tu dois créer un nouveau statement pour chaque requête et le meilleur moyen d'y arriver est de ne pas utiliser un attribut de classe transverse à toute la classe mais d'en spécifier un nouveau dans chaque méthode.