Подтвердить что ты не робот

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

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

4b9b3361

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