java将一个String的列表转为sql语句中in的字符串形式怎么做,除了硬拼之外?

java将一个String的列表转为sql语句中in的字符串形式怎么做,除了硬拼之外?

问题描述:

java将一个String的列表转为sql语句中 in 的字符串形式怎么做,除了硬拼之外?
如图是硬拼的代码:

img


大家帮忙看一下呀。字数。

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注入的状况,属于容错手段。