Javaのsqliteを使用して最後に挿入されたIDを取得する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/216790

  •  03-07-2019
  •  | 
  •  

質問

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();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top