[英]How to obtain column names from SQL query (Jooq,Java)
您好,我有從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`))
要么
insert into `filetest` (`Meno`, `Priezvisko`, `Vek`) values ('Jack', 'Daniels', '21')
我需要獲取(解析/獲取)的是值:Meno,Priezvisko,Vek。 是否有可能從表的列的sql查詢名稱中獲取它(使用某些jooq方法)?
根據您的問題,我假設您想使用jOOQ解析器API解析您的SQL字符串,然后從jOOQ的元模型中提取列名稱。
當前(從jOOQ 3.11開始),元模型無法通過公共API獲得。 您只能通過使用VisitListener
來訪問它, VisitListener
是在元模型中包含的每個QueryPart
(即表達式樹元素)上調用的SPI。 此示例實現可以為您提供一個想法:
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();
}
}
它將打印:
Query 1
-------
"id"
"Meno"
"Priezvisko"
"Vek"
"id" -- Field is referenced again from the constraint
Query 2
-------
"Meno"
"Priezvisko"
"Vek"
當然,另一個選擇是使用反射來訪問jOOQ的內部。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.