3

考虑下表:

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创造了什么价值?仅使用该字段执行 SELECTname无效,因为可能存在重复条目。

4

3 回答 3

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)执行此操作时,您可以在使用适当的executeUpdate()方法“请求”它们之后使用getGeneratedKeys() 。

于 2011-07-22T14:47:37.920 回答
1

您使用 JDBC 方法

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

Derby 手册中所述。

另请参阅 Javadocs:DatabaseMetaData#supportsGetGeneratedKeys()Statement#getGeneratedKeys()

于 2014-08-09T01:41:52.963 回答
0

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

SELECT TOP 1 id FROM language ORDER BY id DESC

查找最后插入的 ID。

德比的替代品:

SELECT MAX(id) from language

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

另请参阅此讨论

于 2011-07-22T14:42:52.767 回答