Каков наилучший способ получить последний вставленный идентификатор с помощью sqlite из Java? - PullRequest
13 голосов
/ 19 октября 2008

Каков наилучший способ получить последний вставленный идентификатор с помощью sqlite из Java? Google дает мне разные ответы - некоторые говорят, что выберите last-insert-rowid; другие говорят, что вызов Statement.getGeneratedKeys (). Какой лучший маршрут выбрать? (Я просто хочу вернуть идентификатор, а не использовать его для других вставок или чего-либо еще.)

Ответы [ 2 ]

22 голосов
/ 07 марта 2009

В любом подходе выполняется один и тот же точный оператор SQL, но java.sql.Statement.getGeneratedKeys() более переносим для различных базовых баз данных.

Использование API-функции sqlite3_last_insert_rowid() C или 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();
}
9 голосов
/ 20 октября 2008

Используйте getGeneratedKeys(), если ваш драйвер JDBC поддерживает это. Вы не хотите копаться, пытаясь получить ключ самостоятельно после вставки. Если ваш драйвер не поддерживает getGeneratedKeys(), тогда я получу следующее значение ключа перед вставкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...