Какой лучший способ получить последний вставленный id, используя sqlite из Java? Google дает мне разные ответы - некоторые говорят, что выбрать последнюю-вставить-rowid; другие говорят, что call statement.getGeneratedKeys(). Какой лучший маршрут? (Я просто хочу вернуть идентификатор, а не использовать его для других вставок или что-то еще.)
Какой лучший способ получить последний вставленный id, используя sqlite из Java?
Ответ 1
Используйте getGeneratedKeys()
если ваш драйвер JDBC поддерживает это. Вы не хотите копаться, пытаясь получить ключ самостоятельно после вставки. Если ваш драйвер не поддерживает getGeneratedKeys()
я получу следующее значение из ключа перед вставкой.
Ответ 2
Любой подход выполняет тот же самый точный оператор SQL, но java.sql.Statement.getGeneratedKeys()
более переносим в разные базовые базы данных.
Используя функцию sqlite3_last_insert_rowid()
C API или last_insert_rowid()
Функция SQL - это правильный способ получения строки, сгенерированной во время последней вставки.
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();
}