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

Posted

技术标签:

【中文标题】获取列名包含大写字符的表的主键时,Jooq 的值无效【英文标题】:Invalid values with Jooq when getting the primay keys for a table with column names containing upper case char 【发布时间】:2016-05-27 14:48:24 【问题描述】:

在 Sqlite 中给出下表:

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

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

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

【问题讨论】:

如何获得table 引用?通过代码生成器,或通过org.jooq.Meta? 【参考方案1】:

我怀疑你使用的是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),应该尽快修复。

【讨论】:

以上是关于获取列名包含大写字符的表的主键时,Jooq 的值无效的主要内容,如果未能解决你的问题,请参考以下文章

JOOQ 连接两个具有相同列名的表

oracle 如何获取表的主键列名,如何获取表的所有列名

MS SQL SERVER搜索某个表的主键所在的列名

JOOQ 获取外键表

如何从 JAVA 中的 ResultSet 或 ResultSetMetaData 对象中获取数据库表的主键的列名?

JOOQ:用字符串获取表和列?