JAVA + SQL, Operation not allowed after ResultSet closed

Eskode -  
Reivax962 Messages postés 3742 Statut Membre -
Bonjour,

Je travail actuellement sur un projet de simulation de course hippiques, et je rencontre quelques problèmes avec la méthode de mise à jour des blessures des chevaux.

Voici mon code :
public void majBless() throws SQLException{
String url = "jdbc:mysql://localhost:3306/Hippodrome";
String user = "root";
String password = "";
Connection connect8 = DriverManager.getConnection(url, user, password);
Statement state8 = connect8.createStatement();
ResultSet resultat8 = state8.executeQuery("SELECT * FROM chevaux WHERE blessure !=0 ");
while(resultat8.next()){
int b = resultat8.getInt("blessure");
b = b-1;
int idC = resultat8.getInt("idC");
String sql = "UPDATE chevaux SET blessure = "+b+" WHERE idC = "+idC+"";
state8.executeUpdate(sql);
}
}


Le problème étant que l'exécution se bloque lorsque cette méthode est appelée et je reçoit le message d'erreur suivant :

java.sql.SQLException: Operation not allowed after ResultSet closed

Je remarque également que la boucle n'est jamais exécutée plus d'une foi.

Merci à l'avance pour vos réponses !

1 réponse

  1. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    Je ne m'y connais pas tellement en Java, mais il me semble que le problème vient de l'imbrication de requêtes utilisant la même ressourcestate8.
    Pour y pallier, tu pourrais déclarer un nouveau Statement, mais je te propose plutôt une solution qui règlera le problème et allègera ton code.
    Plutôt qu'un SELECT, puis plusieurs UPDATE, utilise un seul UPDATE :
         public void majBless() throws SQLException{
            String url = "jdbc:mysql://localhost:3306/Hippodrome";
            String user = "root";
            String password = "";
            Connection connect8 = DriverManager.getConnection(url, user, password);
            Statement state8 = connect8.createStatement();
            ResultSet resultat8 = state8.executeUpdate("UPDATE chevaux SET blessure = blessure - 1 WHERE blessure > 0");
        }


    Xavier
    0