JDBC を使用して Java DB データベースに接続しており、最後に挿入されたレコードの ID (自動インクリメント) を取得したいと考えています。
これはよくある質問だと思いますが、たとえば MS SQL Server を使用した ソリューションを見ています。Java DB に相当するものは何ですか?
JDBC を使用して Java DB データベースに接続しており、最後に挿入されたレコードの ID (自動インクリメント) を取得したいと考えています。
これはよくある質問だと思いますが、たとえば MS SQL Server を使用した ソリューションを見ています。Java DB に相当するものは何ですか?
そのために DBMS 固有の SQL を使用する必要はありません。
それがgetGeneratedKeys()の目的です。
ステートメントを準備するときに、自動生成された列の名前を渡します。これは、getGeneratedKeys() を使用して取得できます。
PreparedStatement pstmt = connection.prepareStatement(
"insert into some_table (col1, col2, ..) values (....)",
new String[] { "ID_COLUMN"} );
pstmt.executeUpdate();
ResultSet rs = pstmt.getGeneratedKeys(); // will return the ID in ID_COLUMN
この場合、列名は大文字と小文字が区別されることに注意してください (Derby および他の多くの DBMS で)。
new String[] { "ID_COLUMN"}
とは何か違うnew String[] { "id_column"}
または、次を使用することもできます。
connection.prepareStatement("INSERT ...", PreparedStatement.RETURN_GENERATED_KEYS);
IDENTITY_VAL_LOCAL 関数を使用して、探しているものを取得できる場合があります。(ダービー参考)
この関数は、「VALUES 句を使用した単一行の INSERT ステートメントの結果として割り当てが発生した、接続の ID 列の最も最近割り当てられた値」を返すことになっています。
この関数は、対応する ID 列の実際のデータ型に関係なく、DECIMAL(31,0) を返すことに注意してください。
また、これは VALUES 句を含む単一行の挿入に対してのみ機能します。