java将一个String的列表转为sql语句中in的字符串形式怎么做,除了硬拼之外?
问题描述:
java将一个String的列表转为sql语句中 in 的字符串形式怎么做,除了硬拼之外?
如图是硬拼的代码:
大家帮忙看一下呀。字数。
答
String haveString = haveGuids.stream()
.map(guid->'\''+guid+'\'')
.collect(Collectors.joining(",","(",")"));
答
遍历列表,将数取出来。
答
有几种方式
一,整个将字符串作为一个SqlParameter参数传递进入,在数据库内进行 split_string 切割,2016自带这个函数,低于这个版本,需要自己实现split功能(表值函数),好处是安全,没字符串拼接造成的注入风险
二,使用正则、替换等方式,自行拼接,这个方式需要自己加上字符串过滤,否则会存在注入风险
另外提醒你一下,你的sql 语句中 not in 后边应该有一对圆括号,这个括号不要放到拼接字符串中,放到指令中
答
另外,上述代码存在 SQL 注入的隐患,
一般情况下,对于Where条件的拼接过程,在拼接之前,都会针对参数进行SQL注入的检查或者过滤。
- 检查的意思就是检查是否存在SQL注入的情况,
比如有的参数值是1' OR 1=1 OR '2'='2
,拼接到SQL中,几乎所有查询都会出结果。 - 过滤的意思就是去掉参数中 SQL 关键字,以防后续拼接时产生SQL注入的状况,属于容错手段。