SQL (Java, h2): какой лучший способ получить уникальный идентификатор единственного элемента, который я только что вставил в мою базу данных?

Мой текущий метод:

SELECT TOP 1 ID FROM DATAENTRY ORDER BY ID DESC

Это предполагает, что последний вставленный элемент всегда имеет самый высокий уникальный идентификатор (первичный ключ, автоинкремент). Здесь что-то плохое.

Альтернативы?

Ответы

Ответ 1

Если драйвер JDBC поддерживает его, вы также можете просто использовать Statement#getGeneratedKeys().

String sql = "INSERT INTO tbl (col) VALUES (?)";
preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1, col);
preparedStatement.executeUpdate();
generatedKeys = preparedStatement.getGeneratedKeys();
if (generatedKeys.next()) {
    long id = generatedKeys.getLong(1);
} else {
    // Throw exception?
}

Ответ 2

Если вы используете MySQL, вы можете сделать

select last_insert_id();

При использовании MS SQL

select scope_identity();

Для H2, я считаю, что это

CALL SCOPE_IDENTITY();

но у меня нет опыта работы с этой БД