ВСТАВЬТЕ, и получите автоматически увеличенное значение - PullRequest
3 голосов
/ 22 июля 2011

Рассмотрим следующую таблицу:

create table language (
    id integer generated always as identity (START WITH 1, INCREMENT BY 1),
    name long varchar,
    constraint language_pk primary key (id)
);

К которой я бы вставил запись таким образом.

insert into language(name) values ('value');

Как узнать, какое значение для id было создано?Простое выполнение SELECT с использованием поля name недопустимо, потому что могут быть повторяющиеся записи.

Ответы [ 3 ]

6 голосов
/ 22 июля 2011

Через простой SQL:

 insert into language(name) values ('value');
 SELECT IDENTITY_VAL_LOCAL();

Подробнее см. В руководстве: http://db.apache.org/derby/docs/10.7/ref/rrefidentityvallocal.html

При выполнении этого из класса Java (через JDBC) вы можете использовать getGeneratedKeys () после «запроса» их методом approriate executeUpdate () .

1 голос
/ 09 августа 2014

Вы используете метод JDBC

st.execute(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet keys = st.getGeneratedKeys();

как указано в руководстве Derby .

См. Также Javadocs: DatabaseMetaData # supportGetGeneratedKeys () и Statement # getGeneratedKeys ()

0 голосов
/ 22 июля 2011

Вы можете выполнить этот оператор (NB, но не на 100% уверен, что этот синтаксис правильный для Derby:

SELECT TOP 1 id FROM language ORDER BY id DESC

Чтобы найти последний вставленный идентификатор.

Альтернатива для дерби:

SELECT MAX(id) from language

Очевидно, что это будет точно, только если между вашей вставкой и выбором не было никаких других вставок (включая вставки других пользователей).

См. Также обсуждение :

...