Каков наилучший способ получить последний вставленный идентификатор с помощью sqlite из Java?
Вопрос
Какой лучший способ получить последний вставленный идентификатор с помощью sqlite из Java? Google дает мне разные ответы - некоторые говорят, что выберите last-insert-rowid; другие говорят, что вызов Statement.getGeneratedKeys (). Какой лучший маршрут выбрать? (Я просто хочу вернуть идентификатор, а не использовать его для других вставок или чего-либо еще.)
Решение
Используйте getGeneratedKeys ()
, если ваш драйвер JDBC поддерживает это. Вы не хотите копаться, пытаясь получить ключ самостоятельно после вставки. Если ваш драйвер не поддерживает getGeneratedKeys ()
, я получу следующее значение ключа перед вставкой.
Другие советы
В любом подходе выполняется один и тот же точный оператор SQL, но java.sql.Statement.getGeneratedKeys ()
более переносим для различных базовых баз данных.
Использование функции sqlite3_last_insert_rowid ()
C API. или last_insert_rowid ()
функция SQL является правильным способом получения rowid, сгенерированный во время последней вставки.
SQLite поддерживает скалярную функцию SQL как
SELECT function-name();
Поэтому, если у вас нет прямого доступа к API C, вы можете вызвать скалярную функцию last_insert_rowid ()
с помощью оператора SELECT
.
Если вы посмотрите на исходный код для реализации SQLiteJDBC (является это то, что вы используете?) вы увидите, что именно это сделал автор этой оболочки JDBC:
ResultSet getGeneratedKeys() throws SQLException {
if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
"select last_insert_rowid();");
return getGeneratedKeys.executeQuery();
}