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-MySql]Recuperer l'identifiant aprés un insert


Sujet :

JDBC Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut [JDBC-MySql]Recuperer l'identifiant aprés un insert
    Bonjour à tous,

    J'utilise le driver JDBC pour faire la liason entre mon programme java et mon SGBD : MySql.

    Je fais un insert dans cette base de donnée dans un table. Cette table possede un champ identifiant qui s'auto-incremente (gerer par MySql et non par mon programme). J'aimerais recuperer cette identifiant determiner par mysql aprés avoir inserer une ligne dans cette table sans autant refaire une requete sur la table.

    Voici mon code :

    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
    try{
                con.createStatement().executeUpdate("INSERT INTO Message (IdentifiantForum, IdParametre , Titre, Importance, Auteur,  Date, NbMessages, NbVus, DateRecolte) " +
                                                    "VALUES ("  + NewDiscussion.GetIDDiscussForum() + 
                                                            "," + NewDiscussion.GetIdParam() + 
                                                            "," + NewDiscussion.GetTitre() +
                                                            "," + NewDiscussion.GetTypeImportance() +
                                                            "," + NewDiscussion.GetAuteur() +
                                                            "," + NewDiscussion.GetDate() +
                                                            "," + NewDiscussion.GetNombreMessageARecup() +
                                                            "," + NewDiscussion.GetNombreVus() +
                                                            "," + NewDiscussion.GetDateRecolte() +
                                                            ");"
                                                    );
            }
            catch(SQLException sqlE){
                //GESTION D'ERREUR
            }
     
           //J'aimerais recuperer l'identifiant ici!
    }
    Merci par avance pour vos futures reponses

  2. #2
    Membre averti Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Points : 409
    Points
    409
    Par défaut
    A mon avis, tu est obligé de tefaier une requête de type SELECT

    Ps: Essaie d'utiliser un peu les PreparedStatement, c'est un peu plus propre et l y a beaucoup moins de risuqe que ta requête tombe à l'eau

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'ai en partie regler mon problème, en effet, j'arrive a recuperer l'identifiant auto-generer grâce au code ci-dessous. Je passe pas une instance de resulset qui est prévu en théorie pour recuperer les données d'un select.Et je suis donc obligé de passer par un while, si quelqu'un a une meilleure solution, n'hesitez pas, car celle que j'ai trouvé me pique les yeux .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int IdMessage = 0;
            //INSERER LE MESSAGE 
            try{
                Statement LeStatement = TheConnnection.createStatement();
                LeStatement.executeUpdate ("requeteInsert);"      
                                              , Statement.RETURN_GENERATED_KEYS);          
                ResultSet rSetIdGenerees = LeStatement.getGeneratedKeys();
                while (rSetIdGenerees.next()) {
                    IdMessage = rSetIdGenerees.getInt(1);
                }
            }
            catch(SQLException sqlE){
                //gestion erreur
            }
    Nicotine, merci pour ta reponse et je vais regarder les PreparedStatement .

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Je viens de regarder un peu les PreparedStatement et en effet ça me sera bien utile, merci bien . Pour ceux qu'ils ne le savent pas le prepared statement permet de precompiler la requete (contrairement au statement qui compile à la volée) et donc gagner un temps non négligeable lorsque on execute plusieurs fois la même requete.
    Voici ma source :
    http://java.developpez.com/faq/jdbc/...paredstatement

    je ne suis pas allé bien loin !

  5. #5
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 234
    Points : 1 897
    Points
    1 897
    Par défaut
    Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String rq_ConfBascules="INSERT INTO CONFBASCULES " +
    		"VALUES (GEN_ID(gen_confbascules,1),"+uneConfBascules.getNbrVoie()+",'"+
    		uneConfBascules.nomPosition+"',"+uneConfBascules.getSymetrique()+",'"+
    		uneConfBascules.getStringPosition()+"',0,"+Global.ID_S_DEFAULT+");";
    GEN_ID(gen_confbascules,1) utilise ici le générateur nommé "gen_confbascules" et créé initialement dans la base de données (comme Firebird par exemple).

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    @ MisterNono :

    Gen_id permet de faire quoi au juste ?

    D'aprés ce que je comprend il permet de generer un id. Mais dans mon cas c'est gerer dans MySql. Je cherche à recuperer cet ID sans passer par une requete Select supllementaire qui me permetrait de recuperer le dernier enregistrement.

    Mais peut etre que j'ai mal compris et qu'il est possible de recuperer l'ID avec ce que tu m'a donné mais j'en doute

  7. #7
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 234
    Points : 1 897
    Points
    1 897
    Par défaut
    Mais GEN_ID utilise le générateur d'ID passé en paramètre.

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    http://java.developpez.com/faq/jdbc/...atement#autoGK

    Ma première solution est la même que celle donnée dans la FAQ, je vais donc garder celle la, merci pour votre aide .

  9. #9
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 234
    Points : 1 897
    Points
    1 897
    Par défaut
    Juste pour information :

    ma méthode fonctionne.

    A+

  10. #10
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    Tout dépend de la base de données que tu utilises Nono.
    Oracle, DB2, etc. vont utiliser les séquences alors que MySQL, SQLServer, etC. auront opté pour les clé autoincrémentées.

    En ce qui concerne ta solution, elle fonctionne surement sur Firebird (je n'ai jamais utilisé) mais en est-il de même sur les autres bases de données ... je n'en sait rien , une solution équivalente existe cependant surement dans chaque base de données existantes.

    Sinon la requete SQL permettant de récupérer le dernier identifiant est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select LAST_INSERT_ID()

  11. #11
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 234
    Points : 1 897
    Points
    1 897
    Par défaut
    Merci du renseignement.

    A+

  12. #12
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par BizuR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select LAST_INSERT_ID()
    C'est parfait, voila qui est propre

    Merci bien!

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

Discussions similaires

  1. Recuperer l'identifiant aprés insertion d'un tupple
    Par bambou dans le forum PostgreSQL
    Réponses: 17
    Dernier message: 01/10/2010, 15h29
  2. Réponses: 5
    Dernier message: 30/07/2010, 20h33
  3. [C#] Apres un insert recuperer l'identifiant
    Par hirochirak dans le forum Accès aux données
    Réponses: 4
    Dernier message: 29/11/2006, 15h33
  4. comment recuperer l'id apres un insert
    Par philippe123 dans le forum ASP
    Réponses: 5
    Dernier message: 09/08/2005, 09h54
  5. Réponses: 3
    Dernier message: 10/07/2005, 17h37

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