[英]How to obtain column names from SQL query (Jooq,Java)
Hello I have a problem with obtain values from SQL query (in Java with using library of jooq)? 您好,我有从SQL查询获取值的问题(在Java中,使用jooq库)?
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`))
or 要么
insert into `filetest` (`Meno`, `Priezvisko`, `Vek`) values ('Jack', 'Daniels', '21')
What I need to obtain (parse/get) are values: Meno, Priezvisko, Vek. 我需要获取(解析/获取)的是值:Meno,Priezvisko,Vek。 Is it possible somehow get it from sql query name of columns of table (with some jooq method)?
是否有可能从表的列的sql查询名称中获取它(使用某些jooq方法)?
From your question, I'm assuming you'd like to use the jOOQ parser API to parse your SQL string and then extract the column names from jOOQ's meta model. 根据您的问题,我假设您想使用jOOQ解析器API解析您的SQL字符串,然后从jOOQ的元模型中提取列名称。
Currently (as of jOOQ 3.11), the meta model is not available through a public API. 当前(从jOOQ 3.11开始),元模型无法通过公共API获得。 You can access it only by means of using a
VisitListener
, which is an SPI that is called on every QueryPart
(ie expression tree element) that is contained in the meta model. 您只能通过使用
VisitListener
来访问它, VisitListener
是在元模型中包含的每个QueryPart
(即表达式树元素)上调用的SPI。 This example implementation can give you an idea: 此示例实现可以为您提供一个想法:
import org.jooq.*;
import org.jooq.impl.*;
public class Columns {
public static void main(String[] args) {
var parser =
DSL.using(new DefaultConfiguration().set(new DefaultVisitListener() {
@Override
public void visitStart(VisitContext ctx) {
if (ctx.queryPart() instanceof Field
&& !(ctx.queryPart() instanceof Param))
System.out.println(((Named) ctx.queryPart()).getQualifiedName());
}
})).parser();
System.out.println("Query 1");
System.out.println("-------");
parser.parseQuery("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`))").getSQL();
System.out.println();
System.out.println("Query 2");
System.out.println("-------");
parser.parseQuery("insert into `filetest` (`Meno`, `Priezvisko`, `Vek`) values ('Jack', 'Daniels', '21')").getSQL();
}
}
It will print: 它将打印:
Query 1
-------
"id"
"Meno"
"Priezvisko"
"Vek"
"id" -- Field is referenced again from the constraint
Query 2
-------
"Meno"
"Priezvisko"
"Vek"
Another option is, of course, to use reflection to access jOOQ's internals. 当然,另一个选择是使用反射来访问jOOQ的内部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.