В любом подходе выполняется один и тот же точный оператор 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();
}