Statement.RETURN_GENERATED_KEYSルーチンを使用してテーブルから最後に挿入されたID IDを取得しますか?

Possible Duplicate:
How to get the insert ID in JDBC?

次のステートメントでは、最後に挿入されたC12 ID値を取得する方法はありますか?これはJavaDBマニュアルからのものですが、このレコードセットからこの最後に挿入された値を取り出す方法については言及していません。

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 答え

生成されたキーを取得する例を次に示します。

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

PS:関連する StackOverflowの質問で十分です。

2
追加された
けっこうだ! :-)それは古い習慣です。
追加された 著者 Buhake Sindi,
null を返すことはありません。
追加された 著者 BalusC,
@マーク:javadocに違反する: download.oracle.com/javase/6/docs/api/java/sql/… ResultSet にはキーが含まれているか、空です。または SQLException がスローされます。
追加された 著者 BalusC,
@BalusC:ドライバが正しく実装されている場合のみ、それ以外の場合はnullが返されます:) BTW:rs.getLong(1)が実際のキーを返すかどうかは、JDBCドライバの実装方法によって異なります。 RETURN_GENERATED_KEYSを使用している場合(例:PostgreSQLの場合)
追加された 著者 Mark Rotteveel,
javadocは多くのことを要求することができますが、ドライバの実装者がそれを正しく読み取れなかった場合、nullを返すことができます(私は最近、Jaybirdでこのようなバグを修正したためです)。特に、同様のgetResultSet()メソッドはnullを返すことができます。
追加された 著者 Mark Rotteveel,