Любой подход выполняет тот же самый точный оператор SQL, но java.sql.Statement.getGeneratedKeys()
более переносима в разные базовые базы данных.
Используя либо sqlite3_last_insert_rowid()
C API или функция SQL 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();
}