在获取列名包含大写字符的 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),应该尽快修复。
在 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),应该尽快修复。