Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JOOQ从表中获取列_Java_Sql_H2_Jooq - Fatal编程技术网

Java JOOQ从表中获取列

Java JOOQ从表中获取列,java,sql,h2,jooq,Java,Sql,H2,Jooq,我尝试使用JOOQ从H2数据库获取表的所有列(用于测试-稍后可能类似于MySQL或PostGRE) 一切都很好,但当我在检索到的列中循环并将结果记录到控制台时,我注意到了一个问题(可能是一个BUG?) 我的日志代码如下所示: System.out.println(String.format("%d > [%s].[%s].[%s]", col.getOrdinalPosition(), col.getTableCatalog(), col.getTableName(), col.getCo

我尝试使用
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版

更新: 我找到了另一种检索列名的方法:

如果您已经有了
表的实例
,则可以使用此代码“修复”错误

// 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());
//序号位置从1开始,但字段数组从0开始!
字段f=tbl.fields()[col.getOrdinalPosition()-1];
//这是因为JOOQ中有一个错误,其中ColumnName返回的不正确
col.setColumnName(f.getName());
问:这个专栏来自哪里? 答复:

dslCtx=DSL.using(cfg);
InformationSchema is=dslCtx.InformationSchema(tbl);
List columns=is.getColumns();

Column
不在
JOOQ
org.JOOQ.util.xml.jaxb.Column
包中

这是jOOQ 3.9.1中的一个bug,将在3.10.0和3.9.2中修复:

@LukasEder我在原问题的基础上补充了你问题的答案;它来自于
JOOQ
的包
org.JOOQ.util.xml.jaxb.Column
哦,很抱歉,感谢您的澄清。将回答,soonForgot说:谢谢报道这个问题,顺便说一句!没问题,感谢您的快速回复和即将到来的修复!
DSLContext dslCtx = DSL.using(cfg);
InformationSchema is = dslCtx.informationSchema(tbl);
List<Column> columns = is.getColumns();