首页 > 解决方案 > 如何从 SQL 查询(JOOQ)中获取列参数

问题描述

我有一个问题,是否可以从 JOOQ -java 中的 SQL 查询中获取参数。

我正在使用这样的东西:

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

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');

将像这样处理(输出):

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

我还需要使用这样的列名获取输出:

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

有可能是因为我不知道怎么做吗?如果我可以问是否可以从查询中获取 tableName ?(在我们的示例中为“filetest”)

为什么我需要这个是让这些参数创建 CSV 文件(SQL -> CSV) 从提到的 SQL 创建 CSV:

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

标签: javasqljooq

解决方案


特定参数恰好“链接”到 SQL 语句中的列这一事实是您的一个相当随意的假设。一个会打破您的假设的简单示例是以下语句:

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

该语句现在将包含 5 个参数:

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

您可能想要使用 generated FiletestRecord,它本质上是一个Map<Field<?>, ?>可以通过调用or or转换为INSERTorUPDATE语句的record.insert()record.update()

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

推荐阅读