INSERT,并获取自动递增的值

时间:2011-07-22 14:40:24

标签: sql derby javadb

考虑下表:

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的创建价值?只使用name字段进行SELECT无效,因为可能存在重复的条目。

3 个答案:

答案 0 :(得分:6)

通过纯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()方法“请求”它们之后使用executeUpdate()

答案 1 :(得分:1)

您使用JDBC方法

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

Derby manual中所述。

另见Javadocs:DatabaseMetaData#supportsGetGeneratedKeys()Statement#getGeneratedKeys()

答案 2 :(得分:0)

您可以执行此语句(注意,不要100%确定此语法对于Derby是正确的:

SELECT TOP 1 id FROM language ORDER BY id DESC

查找最后插入的ID。

德比的替代方案:

SELECT MAX(id) from language

显然,只有在插入和选择之间没有发生其他插入(包括其他用户的插入)时,这才是准确的。

另见discussion