Javaからsqliteを使用して最後に挿入されたIDを取得する最良の方法は何ですか? Googleは私にさまざまな答えを与えています.last-insert-rowidを選択すると言う人もいます。他の人は、call statement.getGeneratedKeys() と言います。最適なルートは何ですか? (IDを返したいだけで、他の挿入などには使用しません。)
Ross
質問する
22809 次
2 に答える
23
どちらの方法でもまったく同じ SQL ステートメントを実行できますが、java.sql.Statement.getGeneratedKeys()
基礎となるさまざまなデータベースへの移植性が高くなります。
最後の挿入時に生成された行 ID を取得するには、sqlite3_last_insert_rowid()
C API 関数またはSQL 関数を使用するのが正しい方法です。last_insert_rowid()
SQLite は、SQL スカラー関数の構文を次のようにサポートします。
SELECT function-name();
したがって、C API に直接アクセスできない場合は、ステートメントlast_insert_rowid()
を介してスカラー関数を呼び出すことができます。SELECT
SQLiteJDBC実装のソース コードを見ると(これはあなたが使用しているものですか?)、これがまさにその JDBC ラッパーの作成者が行ったことであることがわかります。
ResultSet getGeneratedKeys() throws SQLException {
if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
"select last_insert_rowid();");
return getGeneratedKeys.executeQuery();
}
于 2009-03-07T14:20:51.877 に答える
11
getGeneratedKeys()
JDBCドライバーがサポートしている場合に使用します。挿入後に自分でキーを取得しようとしていじくり回したくはありません。ドライバーがサポートしていない場合はgetGeneratedKeys()
、挿入前にキーから次の値を取得します。
于 2008-10-20T02:44:57.333 に答える