12

JDBC を使用して Java DB データベースに接続しており、最後に挿入されたレコードの ID (自動インクリメント) を取得したいと考えています。

これはよくある質問だと思いますが、たとえば MS SQL Server を使用した ソリューションを見ています。Java DB に相当するものは何ですか?

4

3 に答える 3

26

そのために 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);
于 2011-02-04T07:51:40.327 に答える
3

IDENTITY_VAL_LOCAL 関数を使用して、探しているものを取得できる場合があります。(ダービー参考)

この関数は、「VALUES 句を使用した単一行の INSERT ステートメントの結果として割り当てが発生した、接続の ID 列の最も最近割り当てられた値」を返すことになっています。

この関数は、対応する ID 列の実際のデータ型に関係なく、DECIMAL(31,0) を返すことに注意してください。

また、これは VALUES 句を含む単一行の挿入に対してのみ機能します。

于 2011-02-04T05:25:03.103 に答える