Получить идентификатор записи, только что вставленной в базу данных Java DB (Derby) - PullRequest
10 голосов
/ 04 февраля 2011

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

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

Ответы [ 2 ]

22 голосов
/ 04 февраля 2011

Для этого не нужно использовать специфический для СУБД 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 голосов
/ 04 февраля 2011

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

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

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

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

...