Мой текущий метод таков:
SELECT TOP 1 ID FROM DATAENTRY ORDER BY ID DESC
Предполагается, что последний вставленный элемент всегда имеет наивысший уникальный идентификатор (первичный ключ, автоинкремент). Здесь что-то не так.
Альтернативы?
Мой текущий метод таков:
SELECT TOP 1 ID FROM DATAENTRY ORDER BY ID DESC
Предполагается, что последний вставленный элемент всегда имеет наивысший уникальный идентификатор (первичный ключ, автоинкремент). Здесь что-то не так.
Альтернативы?
Если драйвер JDBC поддерживает это, вы также можете просто использовать _ 1_ за это.
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?
}
IDENTITY()
под капотами, но теперь более абстрактным и независимым от БД способом с использованием чистого JDBC API. У вас будет меньше головной боли при обслуживании, когда вы захотите переключить базу данных. Если вы все сделали правильно и стандартным способом, то все, что вам нужно сделать, это заменить драйвер JDBC и URL / логин. Вы можете сохранить кодировку без изменений.
- person BalusC; 15.04.2010
Если вы используете MySQL, вы можете сделать
select last_insert_id();
При использовании MS SQL
select scope_identity();
Что касается H2, я считаю, что это
CALL SCOPE_IDENTITY();
но у меня нет опыта работы с этой БД
SCOPE_IDENTITY()
H2 не будет работать должным образом. См. groups.google.com/d/msg/h2-database/0xJsP993RHY / 0LERpBvtLNUJ
- person Gili; 05.09.2014
SELECT SCOPE_IDENTITY();
вместо SET
. Это все.
- person G. Demecki; 08.03.2016