我有一个问题,是否可以从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"
答案 0 :(得分:0)
特定参数恰巧被“链接”到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
您可能想使用生成的FiletestRecord
,它实际上是一个Map<Field<?>, ?>
,可以通过调用INSERT
转换为UPDATE
或record.insert()
语句或record.update()
或
ctx.insertInto(FILETEST).set(filetestRecord).execute();