Java JOOQ-getPrimaryKey(),getIdentity()返回null

Java JOOQ-getPrimaryKey(),getIdentity()返回null,java,jooq,Java,Jooq,使用此选项: System.out.println("PRIMARY KEY: " + DSL.table(DSL.name(tableName)).getPrimaryKey()); 返回null:/(也尝试了getIdentity()) 在调用getPrimaryKey I执行所有查询之前: 该文本的输出为:createtablefiletest(id-integer-primary 键自动递增不为null,Meno varchar(21)null,Priezvisko varchar(2

使用此选项:

System.out.println("PRIMARY KEY: " + DSL.table(DSL.name(tableName)).getPrimaryKey());
返回null:/(也尝试了getIdentity())

在调用getPrimaryKey I执行所有查询之前:

该文本的输出为:createtablefiletest(id-integer-primary 键自动递增不为null,Meno varchar(21)null,Priezvisko varchar(24)null,Vek int null)

所以这里有“id”主键。。。不明白

还尝试: ctx.meta(DSL.table(“tableName”)).getPrimaryKeys()或 ctx.meta(DSL.tableByName(“tableName”)…返回空列表

返回null:/(也尝试了getIdentity())

调用时,您正在动态创建表元数据。您提供的唯一元数据是(限定的)表名。您没有提供任何列信息,更不用说约束信息,因此您不能指望jOOQ神奇地“知道”某个地方应该有主键

在调用getPrimaryKey I执行所有查询之前:

在查询主键之前是否使用相同的名称创建表并不重要。jOOQ知道,您创建的这个表元信息是一个具有名称且没有列/约束的表

也尝试过:ctx.meta(DSL.table(“tableName”)).getPrimaryKeys()或ctx.meta(DSL.tableByName(“tableName”)…返回空列表


我可以看出这看起来有多么混乱。与调用
ctx.meta()
(这可能是您在这里需要的)然后为您的表查询它相反,
ctx.meta(表…)
只需将参数表的元信息包装在
org.jooq.meta
中,而无需连接到数据库。

那么有什么方法可以检测并返回primaryKey吗?@Noro96:是的,正如我在上一段中提到的:
ctx.meta()
ctx.meta()。getPrimaryKeys()返回:[org.jooq.impl.MetaImpl]$MetaPrimaryKey@360289a5,org.jooq.impl.MetaImpl$MetaPrimaryKey@b59f6bd,org.jooq.impl.MetaImpl$MetaPrimaryKey@5cf1f120]但是当我想通过调用:ctx.meta().getPrimaryKeys().get(0.getName()来打印时,它会返回null@Noro96:一些JDBC驱动程序(这是
ctx.meta()
所基于的)恐怕不要通过
DatabaseMetaData
返回键名。无论如何,您想做什么?我试图获取所有值,但没有表示id(主键)的列(及其值),因此我想通过1.)删除此列或2)来实现。)选择所有列但没有id列,但我必须获取/检测哪个列是id主键。
CreateTableColumnStep table = ctx.createTable(tableName).column("id", INTEGER.identity(true));
table.constraints(DSL.constraint("pk_" + tableName).primaryKey("id"));