Javaのsqliteを使用して最後に挿入されたIDを取得する最良の方法は何ですか?
質問
Javaのsqliteを使用して最後に挿入されたIDを取得する最良の方法は何ですか? Googleは私にさまざまな答えを与えています。最後の挿入列を選択する人もいます。他の人は、statement.getGeneratedKeys()を呼び出します。最適なルートは何ですか? (IDを返したいだけで、他の挿入などには使用しません。)
解決
JDBCドライバーがサポートしている場合は、 getGeneratedKeys()
を使用します。挿入後に自分でキーを取得しようとしていじりたくありません。ドライバーが getGeneratedKeys()
をサポートしていない場合、挿入前にキーから次の値を取得します。
他のヒント
どちらのアプローチでもまったく同じSQLステートメントが実行されますが、 java.sql.Statement.getGeneratedKeys()
は、基礎となるさまざまなデータベースにより移植可能です。
sqlite3_last_insert_rowid()
C API関数のいずれかを使用するまたは last_insert_rowid()
SQL関数を取得する正しい方法です最後の挿入中に生成されたROWID。
SQLiteは、 SQLスカラー関数構文を次のようにサポートしています。
SELECT function-name();
したがって、C APIに直接アクセスできない場合は、 SELECT
ステートメントを介してスカラー関数 last_insert_rowid()
を呼び出すことができます。
SQLiteJDBC 実装のソースコードこれはあなたが使用しているものですか?)あなたはこれがまさにそのJDBCラッパーの作者がやったことであることがわかります:
ResultSet getGeneratedKeys() throws SQLException {
if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
"select last_insert_rowid();");
return getGeneratedKeys.executeQuery();
}