JOOQ从表中获取列

3
我尝试使用 JOOQ 从 H2 数据库(用于测试,以后可能是 MySQL 或 PostGRE)中获取一个表的所有列。一切都很好,但当我遍历检索到的列并将结果记录到控制台时,我注意到了一个问题(可能是一个 BUG?)。我的日志代码如下:
System.out.println(String.format("%d > [%s].[%s].[%s]", col.getOrdinalPosition(), col.getTableCatalog(), col.getTableName(), col.getColumnName()));
我的表格输出结果如下所示:
0 > [TEST].[PERSON].[PERSON]
1 > [TEST].[PERSON].[PERSON]
2 > [TEST].[PERSON].[PERSON]
我预计它会是:

我期望它会是:

0 > [TEST].[PERSON].[ID]
1 > [TEST].[PERSON].[FIRSTNAME]
2 > [TEST].[PERSON].[LASTNAME]

这个表的创建脚本是:

CREATE TABLE PERSON
(
   ID         INTEGER        NOT NULL,
   FIRSTNAME  VARCHAR(255),
   LASTNAME   VARCHAR(255)
);

ALTER TABLE PERSON
   ADD PRIMARY KEY (ID);
所以我的问题是:如何获得“真实”的列名称? 编辑:尝试使用JOOQ版本3.9.0和3.9.1 更新: 我发现另一种检索列名称的方法: 如果您已经拥有Table<?>实例,您可以使用此代码来“修复”错误。
// ordinal position starts at 1 but the fields-array starts at 0!
Field<?> f = tbl.fields()[col.getOrdinalPosition() - 1];
// this is needed due a bug in JOOQ, where the ColumnName is returned incorrect
col.setColumnName(f.getName());

问题:Column是从哪里来的? 答案:

DSLContext dslCtx = DSL.using(cfg);
InformationSchema is = dslCtx.informationSchema(tbl);
List<Column> columns = is.getColumns();

Column类是在JOOQorg.jooq.util.xml.jaxb.Column包之外的。


@LukasEder,我将答案添加到了我的原始问题中;它来自于JOOQ的包org.jooq.util.xml.jaxb.Column - lumo
哦,抱歉,谢谢你澄清。我会尽快回答。 - Lukas Eder
忘了说:顺便感谢您报告这个问题! - Lukas Eder
没问题,谢谢快速回复和即将到来的修复! - lumo
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,