JAVA + SQL, Operation not allowed after ResultSet closed

Fermé
Eskode - Modifié par Eskode le 30/11/2014 à 17:56
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 1 déc. 2014 à 11:11
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 !
A voir également:

1 réponse

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié par Reivax962 le 1/12/2014 à 11:13
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