java - 使用 jOOQ 和 PostgreSQL serial 和 RETURNING 返回一个值

标签 java postgresql sql-insert jooq sql-returning

我有一个 PostgreSQL uris 表,其中包含序列(自动递增)uri_id 列和字符串 uri 列。我可以使用 jOOQ 查询表:

createDSLContext().select(fieldByName("uri_id")).from(tableByName("uris"))
    .where(fieldByName("uri").equal(uri.toString())).fetchOne(0, Integer.class))

返回一个 Java Integer。但是当我插入一个新的 URI 时,我想取回生成的 uri_id 键,所以我尝试这样做:

createDSLContext().insertInto(tableByName("uris"), fieldByName("uri"))
    .values(uri.toString()).returning(fieldByName("uri_id")).fetchOne().getValue(0, Integer.class)

这次我得到一个错误:

Exception in thread "main" java.lang.IllegalArgumentException: Field 0 is not contained in list

作为测试,我尝试在 INSERT 语句中为 uri_id 提供文字值,但仍然出现错误。

看起来生成了正确的 SQL:

insert into "uris" ("uri") values ('http://example.com/') returning "uri_id"

但是返回的记录是空的。即使我在插入语句中指定文字 uri_id 也是如此。

如何使用 jOOQ 从 PostgreSQL INSERT 语句中检索自动生成的列?

最佳答案

这个问题也在 jOOQ user group 上进行了更详细的讨论。 .

从本质上讲,您遇到了一个已知问题,即 RETURNING 子句目前在与普通 SQL 一起使用时不受 jOOQ 3.3(及更低版本)的支持,而不是与生成的表一起使用。这是问题引用:

https://github.com/jOOQ/jOOQ/issues/2374

关于java - 使用 jOOQ 和 PostgreSQL serial 和 RETURNING 返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23064480/

相关文章:

java - 在Java中的日历中添加减法

java - java发生异常

java - PostgreSQL 9.0 JDBC 驱动程序是否适用于 64 位 java?

sql - rails : group and count sql query include zero's

c# - 一个连接中的多个 Insert 语句

php - INSERT IGNORE 可以返回附加值吗?

java - tess4J 应用程序的 JUnit 测试

java - 将一维数组转换为二维数组

database - 在 postgres 中将数据拆分为月份

mysql - 为什么 mySQL 触发器不保存?