Какой лучший способ получить последний вставленный id, используя sqlite из Java?

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

Ответ 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();
}