Autogenerated keys autogenerated keys

JDBC 3.0のキー自動生成に関する機能により、索引の一部あるいは既定値の割り当てられた列から値を取得する方法があります。 には自動増分の機能があって、この機能により、データベースにより自動的に増分された値をとる列を、ユーザは表に定義することができます。 JDBC 3.0ではStatement.getGeneratedKeysメソッドを呼んでこの種類の列の値を取得することができます。このメソッドは値に自動生成キーをとる列を持つResultSetを返します。 またgetGeneratedKeysから返されたResultSetオブジェクトにてResultSet.getMetaDataメソッドを呼んで、IDENTITY_VAL_LOCALから返るのと同様なResultSetMetaDataオブジェクトを得ることもできます。

ユーザはConnection.prepareStatementメソッドや、Statement.executeメソッド、Statement.executeUpdateメソッドの二つ目の引数に、以下に示すいずれかの値を渡すことで、自動生成された列を取得できます。

以下のように定義されたTABLE1という表があるとします。

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

以下の三つのコードは同じことを行います。すなわち、TABLE1に挿入されたC12 の値を持つ、ResultSetを生成します。

コード 1:

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

コード 2:

Statement stmt = conn.createStatement(); String [] colNames = new String [] { "C12" }; stmt.execute( "INSERT INTO TABLE1 (C11) VALUES (1)", colNames); ResultSet rs = stmt.getGeneratedKeys();

コード 3:

Statement stmt = conn.createStatement(); int [] colIndexes = new int [] { 2 }; stmt.execute( "INSERT INTO TABLE1 (C11) VALUES (1)", colIndexes); ResultSet rs = stmt.getGeneratedKeys();

もし自動生成された列を取得できるようにする指定がなければ、 Statement.getGeneratedKeysへの呼び出しはnullのResultSetを返します。