简体   繁体   English

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

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

相关问题 如何从SQL查询(JOOQ)获取列参数 - How to get column parameters from SQL query (JOOQ) Java从列表中提取值并将其作为列名称包含在SQL查询中 - Java Extracting the values from a list and include it as column names in a sql query JAVA如何使用JOOQ逐步构建SQL查询 - JAVA How to build a sql query with JOOQ step by step 如何将此SQL查询写入jOOQ? - How to write this SQL query to jOOQ? 如何从Java中获取Hibernate查询结果中的列名? - How to get column names from Hibernate query result in Java? 如何通过使用从JTextArea提交的SQL查询来填充Java中的JTable,而又不知道用户将输入什么作为列名 - How to populate the JTable in Java by using a SQL query submitted from a JTextArea without knowing what the user will enter as column names 如何使用JOOQ Model API从基于字符串的列名添加动态条件? - How to use JOOQ Model API to add dynamic Conditions from String based column names? 如何从SQL查询中提取列名作为字符串SQL查询作为String传递 - How to extract column names from SQL Query as String SQL query is passed as a String 从SQL查询字符串获取表名和列名 - Get table names and column names from SQL query String 如何在 jOOQ 中使用 SQL 时间戳和 java Instant? - How to use SQL timestamp with java Instant in jOOQ?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM