如何从SQL查询中获取列名(Jooq,Java)

如何从SQL查询中获取列名(Jooq,Java),java,jooq,Java,Jooq,您好,我在使用jooq库从Java中的SQL查询中获取值时遇到问题 create table `filetest`(`id` int not null auto_increment, `Meno` varchar(21) null, `Priezvisko` varchar(24) null, `Vek` int null, constraint `pk_filetest` primary key (`id`)) 或 我需要获得parse/get的是值:Meno、Priezvisko、Vek。

您好,我在使用jooq库从Java中的SQL查询中获取值时遇到问题

create table `filetest`(`id` int not null auto_increment, `Meno` varchar(21) null, `Priezvisko` varchar(24) null, `Vek` int null, constraint `pk_filetest` primary key (`id`))

我需要获得parse/get的是值:Meno、Priezvisko、Vek。
是否可能通过某种jooq方法从表列的sql查询名称中获取它?

根据您的问题,我假设您希望使用解析sql字符串,然后从jooq的元模型中提取列名

目前,从JOOQ3.11开始,元模型无法通过公共API获得。您只能通过使用来访问它,这是对元模型中包含的每个表达式树元素调用的SPI。此示例实现可以让您了解:

导入org.jooq.*; 导入org.jooq.impl.*; 公共类列{ 公共静态无效字符串[]args{ var解析器= DSL.usingnew DefaultConfiguration.setnew DefaultVisitListener{ @凌驾 公共无效访问开始访问上下文ctx{ 如果ctx.queryPart instanceof字段 &&!ctx.queryPart instanceof Param System.out.printlname ctx.queryPart.getQualifiedName; } }.语法分析器; System.out.printlnQuery 1; System.out.println---; parser.parseQuerycreate表`filetest``id`int not null自动递增,`Meno`varchar21 null,`Priezvisko`varchar24 null,`Vek`int null,约束`pk\u filetest`主键`id`.getSQL; System.out.println; System.out.printlnQuery 2; System.out.println---; parser.parseQueryinsert为`filetest``Meno`、`Priezvisko`、`Vek`values` Jack`、`Daniels`、`21'.getSQL; } } 它将打印:

问题1 ---- 身份证件 梅诺 普里兹维斯科 维克 id-再次从约束引用字段 问题2 ---- 梅诺 普里兹维斯科 维克
当然,另一种选择是使用反射来访问jOOQ的内部结构。

我不这么认为。我的文章是关于jooq和java…:它是关于在中解析sql的Jooq@Noro98SQL本身就是一种语言,对于所有的实现都是一样的。您的问题不依赖于JOOQ或Java。因此,你会在那个重复的答案中找到你的答案。你能给我一个例子说明它是如何工作的吗?我无法从您的页面或文档中理解它。。。互联网上使用visitListener从QueryI获取值的例子也不多。我有最后一个问题,我想忽略id列,这意味着可能忽略表中包含经典id和incement+constraint id的所有列。我不知道是否已经有这样的方法,但我想:一个接一个地获取值,如下所示:id`int not null auto_increment Meno varchar21 null Priezvisko varchar24 null Vek int null constraint pk_filetest primary key id,然后询问值是否包含keywod constraint或primary key,或者自动忽略这些值。有什么方法可以把这些值转换成完整的格式吗?@Noro96:我已经给你展示了一个工具,可以用它做任何你想做的事情。我建议使用调试器来逐步检查它,看看它是如何工作的。请注意,VisitListener工具比您立即需要的功能强大得多,因此您可能还有很多后续问题,除非您自己尝试了解它的工作原理。或者,考虑到它的强大功能,它不是您任务的正确工具。jOOQ的未来版本将允许您直接访问jOOQ表达式树。当前的一个没有。
insert into `filetest` (`Meno`, `Priezvisko`, `Vek`) values ('Jack', 'Daniels', '21')