业务说明
最近有一个需求,需要查出来数据,再插入到数据库种。采用的办法是:先把数据取出,放到一个list中,然后循环list,拼接sql的插入语句,然后执行sql。
代码大概如下(简化了业务,表达大意):
String insertSql = "insert into t_test(\"ip\") values";
StringBuffer sb = new StringBuffer(insertSql);
for(int i = 0; i < resultList.size(); i ++){
sb.append("('" + resultList.get(i) + "'),")
}
sb.setLength( sb.length() - 1 ) // 去掉最后的,
sb拼接出来后大概如下:
insert into t_test("ip") values('127.0.0.1'),('127.0.0.2')
思路是没有问题的,代码也不难,执行的也还可以,一切正常。
但是执行了一段时间后,报错了:
mismatched input ‘,’ exceptimg '.'
解决错误
因为一次性拼接了许多结果,所以sql非常长。在报错信息的提示下,最终找到了错误所在。
是这样的,某一个结果,它的值只有一个字符:\
。
然后拼接的sql就变成了:
insert into t_test("ip") values('127.0.0.1'),('\'),('127.0.0.2')
因为\
有转义的作用,所以单引号被转义了,导致sql不完整了,所以出错了。
具体解决的办法:跟项目商量商量这种结果如何处理,\
在结果里到底有什么意义,根据结果处理即可。