14

Javaからsqliteを使用して最後に挿入されたIDを取得する最良の方法は何ですか? Googleは私にさまざまな答えを与えています.last-insert-rowidを選択すると言う人もいます。他の人は、call statement.getGeneratedKeys() と言います。最適なルートは何ですか? (IDを返したいだけで、他の挿入などには使用しません。)

4

2 に答える 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 に答える