在获取列名包含大写字符的 table 的主键时,Jooq 的值无效

Invalid values with Jooq when getting the primay keys for a table with column names containing upper case char

在 Sqlite 中给定以下 table:

CREATE TABLE author (
    idOfAuthor   INTEGER (10) PRIMARY KEY,
    name TEXT (255) 
);

方法 table.getPrimaryKey() returns 一个元素为空的数组。将列名称 "idOfAuthor" 更改为 "id_of_author" 后,它会按预期返回。

也许 org.jooq.impl.Fields class 中的 field(String name) 方法应该使用 equalsIgnoreCase 而不仅仅是 equals

我怀疑您正在使用 Xerial JDBC driver,这意味着您已经 运行 遇到此问题:

https://bitbucket.org/xerial/sqlite-jdbc/issues/167/databasemetadatagetprimarykeys-reports

Xerial JDBC 驱动程序中存在错误,它报告 DatabaseMetaData.getPrimaryKeys() 列全部为小写字符。这不会从 jOOQ 的 Table.getPrimaryKey() 调用中生成主键列。

jOOQ的org.jooq.Meta在幕后使用了JDBCDatabaseMetaData,因此间接遇到了这个问题,也算是一个bug(#5097),应该尽快修复。