【发布时间】:2014-05-28 16:07:36
【问题描述】:
我有一个带有串行(自动递增)uri_id 列和字符串 uri 列的 PostgreSQL uris 表。我可以使用 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 语句中检索自动生成的列?
【问题讨论】:
标签: java postgresql sql-insert jooq sql-returning