java 自由标记在另一个连接之后应用连接

gijlo24d  于 2023-04-19  发布在  Java
关注(0)|答案(2)|浏览(79)

我得到了这样一个数据:

{ "key1" : [ "value1", "value2" ],
  "key2" : [ "value3", "value4" ],
  "key3" : [ "value5", "value6" ] }

我想从它们创建sql查询WHERE子句,如下所示:

WHERE
column1 in (value1, value2)
OR
column2 in (value3, value4)
OR
column3 in (value5, value6)

我试着给<#assign column1 = <#if key1??> ${key1?join(", ")} </#if> >赋值,但似乎不可能
问题是:如何在子句之间设置OR分隔符?如何应用join from join?也许还有其他不使用assign的解决方案?

mdfafbf1

mdfafbf11#

Use可以使用#list#sep。类似这样:

WHERE
<#list map as k, v>
${k} in (${v?join(", ")})
<#sep>
OR
</#list>

另外,你可能想在更简单的情况下使用?join,就像我上面对嵌套清单所做的那样。

b1payxdu

b1payxdu2#

您不应该从数据中获取值并将它们直接放入sql中,因为这会使您的应用程序容易受到sql injection attacks的影响
请参见https://xkcd.com/327/

相反,您应该像这样创建sql

WHERE column1 in (?, ?)
OR column2 in (?, ?)
OR column3 in (?, ?)

然后做一些像

PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, data.key1[0]);
ps.setString(2, data.key1[1]);
...
ps.setString(6, data.key3[1]);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
   ...
}

相关问题