Каков наилучший способ получить последний вставленный идентификатор с помощью sqlite из Java?

StackOverflow https://stackoverflow.com/questions/216790

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Используйте getGeneratedKeys () , если ваш драйвер JDBC поддерживает это. Вы не хотите копаться, пытаясь получить ключ самостоятельно после вставки. Если ваш драйвер не поддерживает getGeneratedKeys () , я получу следующее значение ключа перед вставкой.

Другие советы

В любом подходе выполняется один и тот же точный оператор SQL, но java.sql.Statement.getGeneratedKeys () более переносим для различных базовых баз данных.

Использование функции sqlite3_last_insert_rowid () C API. или last_insert_rowid () функция SQL является правильным способом получения rowid, сгенерированный во время последней вставки.

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();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top