De laatste ingevoegde identiteit-ID uit een tabel ophalen met de routine Statement.RETURN_GENERATED_KEYS?

Mogelijk duplicaat:
   Hoe u de insert-ID in JDBC kunt krijgen?

Hoe kan ik in de volgende instructie de laatst ingevoegde C12-identiteitswaarde ophalen? Dit komt uit de JavaDB-handleiding, maar ze hebben niet vermeld hoe deze laatst ingevoegde waarde uit deze recordset moet worden gehaald.

CREATE TABLE TABLE1 (C11 int, C12 int GENERATED ALWAYS AS IDENTITY)

Statement stmt = conn.createStatement(); 
stmt.execute(
    "INSERT INTO TABLE1 (C11) VALUES (1)",
    Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
0

1 antwoord

Hier is een voorbeeld om gegenereerde sleutels te krijgen:

ResultSet rs = statement.getGeneratedKeys();
if (rs != null && rs.next()) {
    key = rs.getLong(1);
}

PS: een gerelateerde StackOverflow-vraag kan volstaan.

2
toegevoegd
Eerlijk genoeg! :-) het is een oude gewoonte.
toegevoegd de auteur Buhake Sindi, de bron
Het retourneert nooit null .
toegevoegd de auteur BalusC, de bron
@Mark: dat zou de javadoc overtreden: download.oracle.com/javase/6/docs/api/java/sql/… De ResultSet heeft een sleutel of is leeg. Of er wordt een SQLException gegenereerd.
toegevoegd de auteur BalusC, de bron
@BalusC: alleen als het stuurprogramma correct is geïmplementeerd, anders kan het null retourneren :) BTW: als rs.getLong (1) retourneert, hangt de werkelijke sleutel af van hoe het JDBC-stuurprogramma is geïmplementeerd: sommige databases retourneren alles kolommen bij gebruik van RETURN_GENERATED_KEYS (bijv. PostgreSQL)
toegevoegd de auteur Mark Rotteveel, de bron
De javadoc kan veel claimen, maar als de stuurprogramma-implementator het niet goed heeft gelezen, kan het null retourneren (ik weet het omdat ik onlangs precies zo'n bug in Jaybird heb opgelost). Vooral omdat de vergelijkbare methode getResultSet() can null retourneert.
toegevoegd de auteur Mark Rotteveel, de bron