簡體   English   中英

如何從SQL查詢(Jooq,Java)獲取列名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM