44 votes

Clé primaire de la ligne insérée jdbc?

Est-il de la croix de la base de données de la plateforme de manière à obtenir la clé primaire de l'enregistrement que vous venez d'insérer?

J'ai noté que cette réponse dit que vous pouvez obtenir en Appelant SELECT LAST_INSERT_ID() et je pense que vous pouvez appeler en SELECT @@IDENTITY AS 'Identity'; est-il un moyen commun pour ce faire, à travers des bases de données jdbc?

Si non, comment voulez-vous me conseillez de mettre en œuvre ce pour un morceau de code qui peut avoir accès à toutes de SQL Server, MySQL et Oracle?

58voto

extraneon Points 13362

Copié de mon code:

 pInsertOid = connection.prepareStatement(INSERT_OID_SQL, Statement.RETURN_GENERATED_KEYS);
 

où pInsertOid est une instruction préparée.

vous pouvez alors obtenir la clé:

 // fill in the prepared statement and
pInsertOid.executeUpdate();
ResultSet rs = pInsertOid.getGeneratedKeys();
if (rs.next()) {
  int newId = rs.getInt(1);
  oid.setId(newId);
}
 

J'espère que cela vous donne un bon point de départ.

24voto

atripathi Points 388

La réponse d'extraneon, bien que correcte, ne fonctionne pas pour Oracle .

Pour Oracle, procédez comme suit:

 String key[] = {"ID"}; //put the name of the primary key column

ps = con.prepareStatement(insertQuery, key);
ps.executeUpdate();

rs = ps.getGeneratedKeys();
if (rs.next()) {
    generatedKey = rs.getLong(1);
}
 

3voto

johnstok Points 16139

Avez-vous essayé la Déclaration.executeUpdate() et de la Déclaration.getGeneratedKeys() méthodes? Il y a un developerWorks article qui parle de la démarche.

Aussi, dans JDBC 4.0 Soleil ajouté le row_id fonctionnalité qui vous permet d'obtenir une unique poignée sur une ligne. La fonction est prise en charge par Oracle et DB2. Pour sql server, vous aurez probablement besoin d'un pilote tiers tels que cette de un.

Bonne chance!

1voto

anjanb Points 5579

pour oracle, Hibernate utilise NEXT_VALUE à partir d’une séquence si vous avez mappé une séquence pour la génération de valeur PKEY.

Pas sûr de ce que cela fait pour MySQL ou MS SQL Server

1voto

Dónal Points 61837

Spring fournit quelques précieux soutien pour cette opération et le guide de référence semble répondre à votre question:

Il n'y a pas un seul moyen de créer une PreparedStatement (ce qui explique pourquoi la signature de la méthode est la façon dont il est). Un exemple qui fonctionne sur Oracle et peut ne pas fonctionner sur d'autres plateformes c'est...

J'ai testé cet exemple sur MySQL et ça fonctionne aussi, mais je ne peux pas parler pour les autres plates-formes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X