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 :

Operation not allowed after ResultSet closed


Sujet :

JDBC Java

  1. #21
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Si aucun des System.out.println ne sont affichés, c'est que insertFils() n'est pas appelée. Tu n'appellerais pas insertPere() et insertMere() ailleurs, et jamais insertFils() ? Quel est exactement le code de l'actionPerformed() ?
    (poue le test de @Tchize_, tu n'as pas dû modifier les bonnes requêtes...)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  2. #22
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    voilà le code du bouton sauvegarde c'est le même qui appelle les deux autres:

    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
     
    JButton btnSave = new JButton("Sauvegarder");
    		btnSave.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				try {
    					insertBloc();
    					insertMere();
    					insertPere();
    					insertPhoto();
    					insertEtudiant();
    					insertFils();
     
    				} catch (Exception e2) {
    					e2.getStackTrace();
    				}
    			}
    		});
    		btnSave.setBounds(471, 394, 132, 23);
    		contentPane.add(btnSave);

  3. #23
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Bah, déjà, en dehors de ton problème de requêtes qui ne fonctionnent pas, il y a un problème de taille : tu appelles insertPere et insertMere dans l'actionPerformed(), puis tu les appelles dans insertFils, donc l'insertion du fils, si elle était faite, ferait pointer le fils sur des enregistrements de pere et mere différents de ceux insérés précédemment : tes données sont donc incohérentes.

    A noter par ailleurs que (je voulais garder cette remarque pour quand tu aurais réglé ce problème d'insert, mais j'en profite maintenant) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stat.setInt(14,new java.sql.Date(System.currentTimeMillis()).getYear());
    n'est pas la bonne manière d'obtenir l'année courante : cette année, la valeur obtenue est 115 (regarde la javadoc de cette méthode pour savoir pourquoi) ! Je doute que c'est ce que tu voudrais obtenir !
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #24
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    alors là je perds tout je sens que j'ai écrit tout ce code pour rien, comment faire alors? j'ai toutes ces données qui doivent être inclus d'une manière exacte et ce n'est que le début, c'est mon projet de fin d'études

  5. #25
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tout simplement :

    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
    public int insertPere() throws SQLException{        
       int codeProfP = getProfP(); // a voir s'il ne faut pas faire aussi la même chose pour cette méthode !!!
     
       String query = "INSERT INTO pere (nom_pere , revenu_pere,code_prof) VALUES (?,?,?)";
       try(PreparedStatement stat = cnx.prepareStatement(query)) {
           stat.setString(1, txtPere.getText());
           stat.setString(2, txtRevP.getText());
           stat.setInt(3, codeProfP);
     
           stat.executeUpdate();
           ResultSet rslt = stat.getGeneratedKeys();
           rslt.next();
           return rslt.getInt("code_pere");
       } 
    }
    Idem pour insertMere().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void insertFils(int codeP, int codeM) throws Exception{
     
        // int codeP = insertPere();
        // int codeM = insertMere();
     
        try{
             String query = "INSERT INTO fils_de (bac,code_p,code_m) VALUES (?,?,?)";
     
       /* ... */
     
    }
    Et ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    btnSave.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
         try {
    	insertBloc();
    	int mere = insertMere();
    	int pere = insertPere();
    	insertPhoto();
    	insertEtudiant();
    	insertFils(pere, mere);
         } catch (Exception e2) {
    	e2.getStackTrace();
         }
      }
    });
    Par ailleurs, quand on fait une série de requête qui ont un lien les unes avec les autres, il vaudrait mieux passer en autocommit=false, ne pas faire catch de SQLException locale, mais un seul pour l'ensemble, et appeler explicitement commit() après la dernière requete, ou rollback dans le catch. Sinon, en cas d'erreur, tu inséreras la moitié de tes données, et ta base sera incohérente.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #26
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Et pour avoir l'année courante :

    • en Java 8 : Year.now() ;
    • Autrement : Calendar.getInstance().get(Calendar.YEAR).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #27
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    je vais changer ça mais pourriez vous me donner quelques tuto si vous en avez sur ce sujet, c'est la première fois dont j'entends parler de ce autocomit je suis débutante c'est mon premier projet

  8. #28
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    En tant que débutante en Java, c'est possible que tu n'aies jamais entendu parler d'autocommit (enfin la doc en parle quand même), mais tu dois avoir entendu parler de COMMIT et de ROLLBACK, et des transactions : c'est indispensable quand on étudie SQL (rien à voir avec Java d'ailleurs) !

    Sinon, voir :

    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #29
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    Hélas non! ni ceux là aussi, peut être cette année en base de données avancé j'ai ce module cette année je croix, je vais voir sur le net je ne compte jamais sur les cours universitaires

  10. #30
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    soit tu regarde pas au bon endroit ta sortie, soit t'as utilisé javaw.exe pour lancer ton programme. javaw n'a pas de console. Les System.out et System.err tombent dans le vide.

  11. #31
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Hind4Dev Voir le message
    Hélas non! ni ceux là aussi, peut être cette année en base de données avancé j'ai ce module cette année je croix, je vais voir sur le net je ne compte jamais sur les cours universitaires
    Heu les commit et les rollback, ça délimite les transactions. Et si t'as pas vu les transactions dans une cours d'introductions aux les bases de données, c'est que tu devais dormir.

  12. #32
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    j'ai vu le cours des transactions je vais l'essayer mais pour remplacer le code avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ResultSet rslt = stat.getGeneratedKeys();rslt.next(); return rslt.getInt("code_pere");
    
    j'ai eu une exception disant qu'il faut spécifier le statement de getGeneratedKeys

  13. #33
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    d'après la javadoc pour effectuer le commit et rollback j'ai besoin de tout mettre dans la même méthode, me le conseillez-vous? en sachant que insertPere et insertMere me retourne un entier dont j'ai besoin pour les deux autres, alors est ce que je mets juste insertEtudiant et insertFils dans a même méthode??

  14. #34
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Hind4Dev Voir le message
    d'après la javadoc pour effectuer le commit et rollback j'ai besoin de tout mettre dans la même méthode, me le conseillez-vous? en sachant que insertPere et insertMere me retourne un entier dont j'ai besoin pour les deux autres, alors est ce que je mets juste insertEtudiant et insertFils dans a même méthode??
    Je ne sais pas où tu as vu ça : ça probablement un malentendu. Le commit et le rollback aggissent sur l'ensemble des ordres SQL effectués depuis le dernier.

    Avec une transaction, les ordres SQL (UPDATE/INSERT/DELETE) sont fait temporairement et les enregistrements concernés vérrouillés. Ainsi, tu peux modifier un élément, en supprimer un autre, en créer un nouveau, et faire pointer le premier qui pointait sur celui effacé sur le nouveau. Les autres transactions seront mise en attente dès lorsqu'elles voudront accéder à ces données (en lecture comme en écriture). Si tu appelles COMMIT, toutes les modifications sont validées, et avec ROLLBACK elles sont annulées, et les requêtes mise en attente peuvent continuer. Le but est de pouvoir changer l'état de la base en plusieurs requêtes, sans que l'état soit partiellement visible des autres connexions, et qu'on puisse également faire marche arrière d'un coup, si on ne peut pas tout modifier jusqu'au bout (ce qui évite d'avoir des données bancales).

    Rien à voir avec lé découpage en méthodes de ton code Java. Par contre, bien sûr ça oblige à être plus rigoureux : avec une seule méthode, on sait que la transaction début quand on entre dans la méthode et qu'elle se termine quand on la quitte, donc on sait facilement ou faire le commit et le rollback.

    Mais si on a une méthode methodA qui appelle une methodB, on peut faire des méthodes proxy qui appelle ces méthodes (en les mettant private), et gérer la transaction dans ces méthodes.

    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
    private int methodA(int b) throws SQLException {
     
         return insert ...
     
    }
     
    private int methodB() throws SQLException {
     
        return insert ...
     
    }
     
    // créé A + B
    public void methodeProxyA() { // j'ai mis ce nom en exemple, il vaut mieux un nom métier (genre saveEtudiant)...
     
        démarrer transaction
     
        int b = methodB();
        methodA(b);
     
        fin transaction (commit ou rollback si erreur)
     
     
    }
     
    // ne créé qu'un B
    public void methodeProxyB() {
     
        démarrer transaction
     
        methodB();
     
        fin transaction (commit ou rollback si erreur)
     
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  15. #35
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    ah! je croyais qu'il fallait ne pas les séparer, mais faut-il renommer les statements différemment?
    jai vu cet exemple: https://docs.oracle.com/javase/tutor...nsactions.html

  16. #36
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Hind4Dev Voir le message
    ah! je croyais qu'il fallait ne pas les séparer, mais faut-il renommer les statements différemment?
    jai vu cet exemple: https://docs.oracle.com/javase/tutor...nsactions.html
    Ce qu'il y a c'est la connexion prend un état particulier : donc attention en cas de multithread et de partage de connexion. Mais de toute manière, il ne faut pas le faire, transaction ou pas (partager une instance de connexion entre thread). En fait, le mieux est de passer la connexion de méthode en méthode (en paramètre). Le nom des variables de type Statement/PreparedStatement n'a aucune importance.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #37
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    alors j'ai effectué quelques modifications, mais je n'ai en résultat aucun changement, voilà:

    code bouton de sauvegarde:
    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
     
    btnSave.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				try {
    					insertBloc();
    					int mere = insertMere();
    					int pere = insertPere();
    					insertPhoto();
    					insertEtudiant(pere, mere);
    					//insertFils(pere, mere);
     
     
    				} catch (Exception e2) {
    					e2.getStackTrace();
    				}
    			}
    		});
    code insertion (j'ai mis insertEtudiant et innsertFils dans la même méthode) mais elle ne fonctionne pas
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    @SuppressWarnings("deprecation")
    	public void insertEtudiant(int codeP, int codeM) throws Exception {
    		int codeLieu = getLieu();
    		int codeNat = getNat();
    		String codeF = getFiliere();
    		int codeMotif = getMotif();
     
    		PreparedStatement statEt = null;
    		PreparedStatement statFils = null;
     
     
    		String etudiant = "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 (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
     
    		String fils = "INSERT INTO fils_de (bac,code_p,code_m) VALUES (?,?,?)";
     
    		try {
     
    			cnx.setAutoCommit(false);
     
    			statEt = cnx.prepareStatement(etudiant);
    			statFils = cnx.prepareStatement(fils);
     
    			statEt.setString(1, txtBAC.getText());
    			statEt.setString(2, txtNom.getText());
    			statEt.setString(3, txtPrenom.getText());
    			statEt.setString(4, genre);
    			statEt.setString(5, txtAdr.getText());
    			statEt.setString(6, txtPhone.getText());
    			statEt.setString(7, txtMail.getText());
    			statEt.setString(8, (String) txtCCP.getValue());
    			statEt.setString(9, txtDec.getText());
    			statEt.setBoolean(10, bloc);
    			statEt.setString(11, txtIns.getText());
    			statEt.setString(12, txtAn.getText());
    			statEt.setString(13, txtUniv.getText());
    			statEt.setInt(14,
    					new java.sql.Date(System.currentTimeMillis()).getYear());
    			statEt.setInt(15, reste);
    			// stat.setInt(6, rds);
    			statEt.setInt(16, 0);
    			statEt.setInt(17, 0);
    			statEt.setInt(18, 0);
    			statEt.setInt(19, 0);
    			statEt.setInt(20, 0);
    			statEt.setInt(21, 0);
    			statEt.setInt(22, 0);
    			statEt.setInt(23, 0);
    			statEt.setInt(24, 0);
    			statEt.setInt(25, 0);
    			statEt.setString(26, txtBAC.getText());
    			statEt.setString(27, codeF);
    			statEt.setString(28, cycle);
    			statEt.setString(29, ((JTextField) dateChooser.getDateEditor()
    					.getUiComponent()).getText());
    			statEt.setInt(30, codeLieu);
    			statEt.setInt(31, codeNat);
    			// statEt.setInt(14, codePhoto);
    			statEt.setString(32, txtObs.getText());
    			statEt.setDate(33, new java.sql.Date(System.currentTimeMillis()));
    			statEt.setInt(34, codeMotif);
    			statEt.execute();
     
     
    			statFils.setString(1, txtBAC.getText());
    			statFils.setInt(2, codeP);
    			statFils.setInt(3, codeM);
     
     
    			statFils.execute();
     
     
    		} catch (SQLException e ) {
    			JOptionPane.showMessageDialog(null, e);
    	        if (cnx != null) {
    	            try {
    	                System.err.print("Transaction is being rolled back");
    	                cnx.rollback();
    	            } catch(SQLException ex) {
    	            	JOptionPane.showMessageDialog(null, ex);
    	            }
    	        }
    	    } finally {
    	        if (statEt != null) {
    	        	statEt.close();
    	        }
    	        if (statFils != null) {
    	        	statFils.close();
    	        }
    	        cnx.setAutoCommit(true);
    	    }
    	}
    pour le code de insertPere et insertMere j'ai fait comme vous m'aviez montré je reçois cette exception mais l'insertion se fait normale dans la bdd:

    Nom : return generated keyy.jpg
Affichages : 107
Taille : 38,9 Ko

  18. #38
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oui, il suffit de préciser lors de la création du preparedStatement qu'on veut pouvoir récupérer les identifiants générés. Donc par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statEt = cnx.prepareStatement(etudiant, Statement.RETURN_GENERATED_KEYS);
    Ceci peut soulever une exception si ton driver ne supporte pas cette possibilité. Il te faudra utiliser à la place la méthode que tu utilisais avec le max, malheureusement (l'autre solution étant la procédure stockée, plus lourde à mettre en place à ton niveau).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  19. #39
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    oui je l'ai supprimé mais toujours l'insertion dans ces deux tables impossible je ne comprends rien tout parait normal je n'ai aucune exception ni erreur de syntaxe ni dans la console

  20. #40
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je ne vois pas l'appel de cnx.commit() dans ton code. Et attention, c'est l'ensemble de la transaction que tu dois passer en autocommit=false : là tu ne passes que ta méthode insertEtudiant(). Pourquoi avoir fusionné d'ailleurs insertFils() dedans.

    Si on reprend ton code dans l'actionPerformed :
    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
    try {
     
        // ici debut transaction (donc passage à autocommit=false)
     
        // je ne remets pas les modifications sur les ids créés et à passer en paramètres...
        insertBloc();
        insertMere();
        insertPere();
        insertPhoto();
        insertEtudiant();
        insertFils();
     
        // ici COMMIT
     
    } catch (Exception e2) {
     
    // ici ROLLBACK (Mais surtout aucun catch dans les méthodes ci-dessus
       e2.getStackTrace();
       JOptionPane.show...
    }
     
        // ici fin transaction (donc passage à autocommit=true)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Erreur "Operation not allowed after ResultSet closed"
    Par boubounagh dans le forum JDBC
    Réponses: 18
    Dernier message: 28/01/2012, 15h42
  2. Operation not allowed after ResultSet closed
    Par menakikou dans le forum Débuter
    Réponses: 1
    Dernier message: 22/09/2009, 16h38
  3. SQLexception: Operation not allowed after ResultSet closed
    Par fripette dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 12/06/2008, 09h58
  4. Operation not allowed after ResultSet closed
    Par Smix007 dans le forum JDBC
    Réponses: 3
    Dernier message: 10/03/2008, 17h28
  5. Réponses: 7
    Dernier message: 11/08/2006, 09h24

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