MySQL & Java – Récupère l’identifiant de la dernière valeur insérée (JDBC)

Duplication possible:
Comment obtenir l’ID d’insertion dans JDBC?

Bonjour, j’utilise JDBC pour me connecter à la firebase database via Java.

Maintenant, je fais une requête d’insertion, et je dois obtenir l’ID de la dernière valeur insérée (donc, après un stmt.executeUpdate ).

Je n’ai pas besoin de quelque chose comme SELECT id FROM table ORDER BY id DESC LIMIT 1 , car je peux avoir des problèmes de concurrence.

J’ai juste besoin de récupérer l’identifiant associé à la dernière insertion (à propos de mon instance de la déclaration).

J’ai essayé ceci, mais semble ne pas fonctionner sur JDBC:

 public Integer insertQueryGetId(Ssortingng query) { Integer numero=0; Integer risultato=-1; try { Statement stmt = db.createStatement(); numero = stmt.executeUpdate(query); ResultSet rs = stmt.getGeneratedKeys(); if (rs.next()){ risultato=rs.getInt(1); } rs.close(); stmt.close(); } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); risultato=-1; } return risultato; } 

En fait, à chaque fois risultato = -1 , et java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement(). java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().

Comment puis-je résoudre ce problème? Merci aux gens de Stackoverflow 🙂

Ne voulez-vous pas simplement changer:

 numero = stmt.executeUpdate(query); 

à:

 numero = stmt.executeUpdate(query, Statement.RETURN_GENERATED_KEYS); 

Consultez la documentation de l’interface de l’ Statement JDBC.

Mise à jour : Apparemment, il y a beaucoup de confusion à propos de cette réponse, mais je suppose que les personnes confuses ne le lisent pas dans le contexte de la question posée. Si vous prenez le code que l’OP a fourni dans sa question et remplacez la seule ligne (ligne 6) que je suggère, tout fonctionnera. La variable numero est complètement inutile et sa valeur n’est jamais lue après son réglage.

Sinon, vous pouvez faire:

 Statement stmt = db.prepareStatement(query, Statement.RETURN_GENERATED_KEYS); numero = stmt.executeUpdate(); ResultSet rs = stmt.getGeneratedKeys(); if (rs.next()){ risultato=rs.getInt(1); } 

Mais utilisez plutôt la réponse de Sean Bright pour votre scénario.