Operation not allowed after ResultSet closed

Fermé
Hind4Dev Messages postés 2 Date d'inscription dimanche 16 août 2015 Statut Membre Dernière intervention 16 août 2015 - 16 août 2015 à 15:35
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 16 août 2015 à 16:51
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();
}
}

2 réponses

Sugel Messages postés 4070 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 juin 2017 724
Modifié par Sugel le 16/08/2015 à 15:54
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
0
Hind4Dev Messages postés 2 Date d'inscription dimanche 16 août 2015 Statut Membre Dernière intervention 16 août 2015
16 août 2015 à 16:05
c'est ce que j'avais fait auparavant mais il n'est pas là le problème
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 août 2015 à 16:51
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à :

			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.
0