IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

[JDBC] Problème lors d'un suppression


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 226
    Points : 102
    Points
    102
    Par défaut [JDBC] Problème lors d'un suppression
    voilà j'ai une fonction qui doit supprimer un Relevé de facture mais avant cela mettre a 0 le numéro de relevé dans chaque facture qui y est rattaché.
    Mais j'ai des erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    package basedonnee;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
     
    /**
     * @author Administrateur
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    public class SupprimerReleveBase {
    	private String url;
    	private Connection con;
     
    	public SupprimerReleveBase(String numrelevé) {
    		url = "jdbc:odbc:BDActivCom";
     
    		con = null;
     
     
    		try{
     
    			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    			con = DriverManager.getConnection(url);
    			Statement requete = con.createStatement();
    			ResultSet resultat;
     
     
    			resultat = requete.executeQuery("SELECT Facture.NumFacture FROM "
    					+"Facture,Relevé WHERE "
    					+"Facture.NumRelevé = Relevé.NumRelevé "
    					+"AND Relevé.NumRelevé="+numrelevé);
     
     
    			while(resultat.next()){
    				System.out.println("yop");
    				requete.executeUpdate("UPDATE Facture SET NumRelevé=0 WHERE "
    						+"NumFacture="+ resultat.getString("NumFacture"));
    			}
     
    			requete.executeUpdate("DELETE FROM Relevé WHERE NumRelevé="+numrelevé);
     
     
    		}catch(Exception e){System.out.println("erreur suppression relevé base "+e);}
    	}
     
    }
    En fait je rentre dans la boucle ca affiche yop puis j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreur suppression relevé base java.sql.SQLException: ResultSet is closed
    Je ne vois pas ou ca coince.

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Est ce que tu es sur que NumFacture est une String et non un int ?

    Si ca ne vient pas de la je ne vois pas ce que ca peut etre.
    Mess with the best, die like the rest!

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Lorsque tu relances une demande de requete sur ton Statement, avec le meme objet Statement (que tu nommes requete, d'ailleurs, perso, je le nommerai autrement, mais bon, c'est un choix...), java te ferme automatiquement ton objet resultset associé... (Regarde dans la doc sur java.sql, il me semble que c'est expliqué...)

    A ce niveau la :
    - soit tu récupères les références de ta premiere requete dans un tableau/liste/vector/wakazaboogaaa, et ceci avant de relancer ta deuxieme requete.

    - soit tu utilises deux Statement, (voir deux Connexions différentes, si tu veux que tout soit totallement clair, meme si tu charges ton SGBD 2 fois, pour 2 connexions, pour une meme chose...), et deux Resultset différents.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    tiens, pour te donner une idée, dans Statement, tu trouves :

    Only one ResultSet object per Statement object can be open at any point in time. Therefore, if the reading of one ResultSet object is interleaved with the reading of another, each must have been generated by different Statement objects. All statement execute methods implicitly close a statment's current ResultSet object if an open one exists.
    Et dans ResultSet, tu trouves :

    A ResultSet object is automatically closed when the Statement object that generated it is closed, re-executed, or used to retrieve the next result from a sequence of multiple results.
    C'est dans cette partie que ca coince :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    requete.executeUpdate("UPDATE Facture SET NumRelevé=0 WHERE " 
                      +"NumFacture="+ resultat.getString("NumFacture"));
    tu demandes au Statement d'executer une requete, avec en parametre les données d'un Resultset associé à ce même Statement... Pas bon, des que tu passes, executeUpdate, il te ferme resultat... D'ou ton message...

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 226
    Points : 102
    Points
    102
    Par défaut
    Merci bien ghorgor c'était ca j'ai stocké les resultats intermédiaire dans un vecteur et ca marche. Par contre c'est un peu bizarre qu'il ferme le resultset puisque je le réutilise plus pour stocker autre chose

    EDIT : Merci pour toutes ces précisons je ne le savais pas. Enfin maitenant je le sais c'est le principal c'est comme ca qu'on apprends

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Pas de probleme... En general, a ce niveau la je m'embete pas, je fais souvent un seul Resultset par Statement, ca aide pas mal, et ca garde les idées claires... Perso, j'ai pas encore rencontré de cas où j'avais besoin ou intérêt à faire autrement, maintenant, ca viendra peut etre...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 05/05/2006, 09h13
  2. Réponses: 14
    Dernier message: 04/05/2006, 07h40
  3. [JDOM] Problème d'iterateur lors d'une suppression
    Par romuluslepunk dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 07/01/2006, 15h00
  4. Probleme lors d'une suppression
    Par DrTank dans le forum Langage SQL
    Réponses: 5
    Dernier message: 21/04/2005, 17h38
  5. Combler les trous lors d'une suppression dans une table
    Par Billybongjoe dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 08/04/2004, 14h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo