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 :

generatedKey PreparedStatement mysql-connector-5.1.7


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Par défaut generatedKey PreparedStatement mysql-connector-5.1.7
    Bon voilà,

    j'ai fait un bout de code me permettant de créer des prepared staement et de faire l'insert en base et de récupérer les ID auto générés qui marche très bien avec mysl-connector-3.1.7
    Mais là je me suis dit tiens prenons une version plus récente, la version mysql-connector.5.1.7.

    Et bien ça ne marche plus.
    L'insertion en base est bien faite mais la clef générée ne m'est pas renvoyée.

    Donc voilà le schémat de ma base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE IF NOT EXISTS t_users ( id_user INT not null AUTO_INCREMENT , name VARCHAR(200) , firstname VARCHAR(200) , pseudo VARCHAR(200) , philosophie VARCHAR(30), temperament VARCHAR(30) , attitude VARCHAR(30) ,  PRIMARY KEY(id_user)) ENGINE=MyISAM;
    Puis la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO t_users(name , firstname , philosophie , temperament , attitude) VALUES(? , ? , ? , ? , ?)
    Puis le code appelé :
    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
    public int executePstmtReturnKey(String... _toinsert)
    	{
    		String[] _toInsert = _toinsert;
    		try 
    		{
    			PreparedStatement _pstmt = connection.prepareStatement(this.pstmt);
    			for(int i=0;i<_toInsert.length;i++)
    			{
    				_pstmt.setString(i+1 , _toInsert[i]);
    			}
    			_pstmt.execute();
    			ResultSet _result = _pstmt.getGeneratedKeys();
    			_result.next();
    			System.out.println("[BDDInterface.BDD : executePstmtReturnKey] "+ _result.toString() );
    			return _result.getInt(1);
    		} 
    		catch (SQLException e) 
    		{
    			System.out.println("[BDDInterface.BDD : executePstmtReturnKey] Unvalid request :"+ this.pstmt);
    			return -1;
    		}
    	}
    www.natoine.fr
    natoine.developpez.com
    Principalement du Java avec un soupçon de réseaux sociaux.

  2. #2
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Bonjour
    Dis moi,, est ce que tu as commit() avant de récupéré ton ID?? l'ID est généré lorsqu'on commit() la requête??
    ...
    _pstmt.execute();
    <---------------- là il ne te manque pas un connection.commit();
    ResultSet _result = _pstmt.getGeneratedKeys();<-- ensuite tu récupères l'ID généré??
    ...

  3. #3
    Membre éclairé
    Avatar de natoine
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2007
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 393
    Par défaut
    Merci pour ta réponse rapide.

    Malheureusement, ça ne marche pas mieux
    www.natoine.fr
    natoine.developpez.com
    Principalement du Java avec un soupçon de réseaux sociaux.

  4. #4
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Peut-on voir l'erreur générée si possible?

    Sinon, pourquoi tu ne valides pas chaque insertion et commit() en même temps au lieu de récupérer toutes les insertions??
    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
     
    ...
    Int ID =0;
    PreparedStatement _pstmt = connection.prepareStatement(this.pstmt);
    for(int i=0;i<_toInsert.length;i++)
    {
    _pstmt.setString(i+1 , _toInsert[i]);
    _pstmt.execute();
    connection.commit();
    }
     
    ResultSet _result = _pstmt.getGeneratedKeys();
    if(_result.next()){ ID = _result.getInt(1);
    System.out.println("[BDDInterface.BDD : executePstmtReturnKey] "+ _result.toString() );
    }
    return ID;
    ...

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Personnellement, j'ai testé avec la version 5.1.6 du connector et la seule différence par rapport à ton code serait dans l'utilisation de la méthode executeUpdate() plutôt que execute()...

    Peux-tu tester ?

    A+

    [EDIT]
    je viens de faire le test avec execute(), ça fonctionne également...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Dis moi si tu veux récupérer ton ID après le commit(), tu as intérêt à rétirer le ";" après le
    _pstmt.execute();

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

Discussions similaires

  1. [PreparedStatement][MySql] fonction PASSWORD
    Par Invité dans le forum JDBC
    Réponses: 3
    Dernier message: 12/12/2006, 11h36
  2. Réponses: 2
    Dernier message: 21/10/2006, 15h20
  3. [JDBC] Pb avc mysql-connector sous Debian
    Par laulaurent dans le forum JDBC
    Réponses: 3
    Dernier message: 04/05/2006, 00h30
  4. MySql connector ODBC
    Par 12_darte_12 dans le forum Administration
    Réponses: 3
    Dernier message: 02/11/2005, 15h40
  5. [VB.NET] [MySQL Connector Net 1.0.4] Pb de MySqlConnection
    Par toxine dans le forum Windows Forms
    Réponses: 9
    Dernier message: 22/03/2005, 13h44

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