简体   繁体   English

如何从SQL查询(JOOQ)获取列参数

[英]How to get column parameters from SQL query (JOOQ)

I have a question if it is possible to get parameters from SQL query in JOOQ -java. 我有一个问题,是否有可能从JOOQ -java的SQL查询中获取参数。

I am using something like this: 我正在使用这样的东西:

for (Query query: sqlQueries){
    for (Param param: query.getParams().values()) {
         System.out.println("P: "+ param.getName());
    }
}

SQL query: SQL查询:

...
insert into `filetest` (`Priezvisko`, `Meno`, `Vek`) values ('Kotov', 'Peter', '22');
insert into `filetest` (`Priezvisko`, `Meno`, `Vek`) values ('Alhambra', 'Seat', '33');
insert into `filetest` (`Priezvisko`, `Meno`, `Vek`) values ('F50', 'Ferrari', '100');

Will process like that (output): 将这样处理(输出):

P: Kotov
P: Peter
P: 22
P: Alhambra
P: Seat
P: 33
P: F50
P: Ferrari
P: 100

What I also need is to get output with column names like this: 我还需要使用以下列名称获取输出:

P: Priezvisko
P: Meno
P: Vek
P: Kotov
P: Peter
P: 22
... rest

Is it possible because I could not figure it out how? 是否有可能因为我不知道怎么办? If I can ask is it even possible to get tableName from query ? 如果我可以问,甚至有可能从查询中获取tableName吗? ('filetest' in our example) (在我们的示例中为“ filetest”)

Why I need this is to get those paramaters to create CSV file (SQL -> CSV) From mentioned SQL create CSV: 我为什么需要这样做是为了让那些参数创建CSV文件(SQL-> CSV),从提到的SQL创建CSV:

Meno,Priezvisko,Vek
"Peter","Kotov","22"
"Seat","Alhambra","33"
"Ferrari","F50","100"

The fact that a specific parameter happens to be "linked" to a column in your SQL statement is a rather arbitrary assumption of yours. 特定参数恰好被“链接”到SQL语句中的列这一事实是您的一个相当随意的假设。 A simple example that would break your assumption is this statement: 下面的语句是一个简单的示例,可能会破坏您的假设:

insert into `filetest` (`Priezvisko`, `Meno`, `Vek`) 
values ((select 'Kotov' from dual where 1 = 0), 'Peter', '22');

This statement would now contain 5 parameters: 现在,该语句将包含5个参数:

P: Kotov -- Relevant
P: 1     -- Irrelevant
P: 0     -- Irrelevant
P: Peter -- Relevant
P: 22    -- Relevant

You probably want to work with the generated FiletestRecord , which is essentially a Map<Field<?>, ?> that can be translated to INSERT or UPDATE statements by calling record.insert() or record.update() or 您可能想使用生成的FiletestRecord ,该文件本质上是Map<Field<?>, ?> ,可以通过调用record.insert()record.update()将其转换为INSERTUPDATE语句。

ctx.insertInto(FILETEST).set(filetestRecord).execute();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM