質問

私は、PostgreSQL urisテーブルをシリアル(自動入力)uri_id列とString 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
.

テストとして、uri_idステートメントのINSERTのリテラル値を指定しましたが、それでもエラーが発生しました。

正しいSQLが生成されているように見えます。

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

しかし返されたレコードは空です。INSERTステートメントにリテラルuri_idを指定しても、これは当てはまります。

Jooqを使用してPostgreSQL INSERTステートメントから自動生成された列を取得する方法は?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top