获取列名包含大写字符的表的主键时,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 的值无效的主要内容,如果未能解决你的问题,请参考以下文章