考虑下表:
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无效,因为可能存在重复的条目。
答案 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: