jdbc执行sql出现错误: mismatched input ‘,’ excepting ‘.‘ 应该如何解决?

业务说明

      最近有一个需求,需要查出来数据,再插入到数据库种。采用的办法是:先把数据取出,放到一个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不完整了,所以出错了。
      具体解决的办法:跟项目商量商量这种结果如何处理,\在结果里到底有什么意义,根据结果处理即可。
      
      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值