在java for oracle sql in子句中将列表转换为字符串

xmq68pz9  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(385)

我有下面的清单

ArrayList<String> list1=new ArrayList<String>();
list1.add("abc");
list1.add("bdc");
list1.add("acr");
list1.add("bde");

我想在下面的select查询中使用这个列表

select * from emp where emp_name in ('abc','bdc','acr','bde')

我正在使用spring引导rest模板并尝试使用arraylist paramslist=new arraylist(),但失败了。有没有一个简单的方法来代替通过迭代转换成字符串。

rur96b6h

rur96b6h1#

您可以加入列表中的字符串以获得所需内容:

String values = list1.stream().map(str -> String.format("'%s'", str)).collect(Collectors.joining(","));

并生成如下查询:

"select * from emp where emp_name in ("+ values +")";

但是,正如@andreas所指出的,这种方法容易受到sql注入攻击和语法错误(如果列表中的值具有sql保留关键字或特殊字符)。因此,应该使用prepared语句,而不是像这样连接字符串。

相关问题