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

Получить идентификатор записи, только что вставленной в базу данных Java DB (Derby)

Я подключаюсь к базе данных Java DB с помощью JDBC и хочу получить идентификатор (который находится на автоматическом добавлении) последней вставленной записи.

Я вижу, что это общий вопрос, но я вижу решения, используя, например, MS SQL Server, что эквивалентно для Java DB?

4b9b3361

Ответ 1

Для этого не нужно использовать специфический для СУБД SQL.

Для этого getGeneratedKeys().

Когда готовите свое выражение, вы передаете имена автоматически сгенерированных столбцов, которые затем можно получить с помощью getGeneratedKeys()

PreparedStatement pstmt = connection.prepareStatement(
     "insert into some_table (col1, col2, ..) values (....)", 
      new String[] { "ID_COLUMN"} ); 

pstmt.executeUpdate();

ResultSet rs = pstmt.getGeneratedKeys(); // will return the ID in ID_COLUMN

Обратите внимание, что в этом случае имена столбцов чувствительны к регистру (в Derby и многих других СУБД).
new String[] { "ID_COLUMN"} отличается от new String[] { "id_column"}


В качестве альтернативы вы также можете использовать:

connection.prepareStatement("INSERT ...", PreparedStatement.RETURN_GENERATED_KEYS);

Ответ 2

Вы можете получить то, что ищете, используя функцию IDENTITY_VAL_LOCAL. (Справка Derby)

Эта функция должна возвращать "последнее назначенное значение столбца идентификатора для соединения, где назначение произошло в результате одного оператора INSERT одной строки, используя предложение VALUES".

Стоит отметить, что эта функция вернет DECIMAL (31,0), независимо от фактического типа данных соответствующего столбца идентификации.

Кроме того, этот только работает для однострочных вставок, содержащих предложение VALUES.

Ответ 3

Для тех, у кого есть проблемы с получением сгенерированного идентификатора автоинкремента, как я использовал для Java Derby, мой ответ может быть полезным.

stmt.executeUpdate("INSERT INTO xx(Name) VALUES ('Joe')", Statement.RETURN_GENERATED_KEYS);

ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()) {
  int autoKey = rs.getInt(1); //this is the auto-generated key for your use
} 

Ответ скопирован с здесь