大家好,我是李子。
前两天遇到了使用Mybatis批量处理sql语句,因对其不熟悉,被困扰两天,百度了很多方法,但还是毫无头绪,但最后还是解决了,特此献上解决方法。
Mybatis批量更新的时候报错:
java.sql.SQLException: sql injection violation, multi-statement not allow : update XXX(table)
经过百度很多方法都是在数据库连接的地方增加必须配置:&allowMultiQueries=true(貌似只针对于mysql,对于Oracle不适用);看到很多调用foreach导致失败的解决方法,在节点上增加begin,end,但我这里并没有用到,辗转了一天,灵感袭来,在原理上调用foreach和自己写多个update的语句原理上应该是一样的,于是在mapper.xml中update节点下的开头和结尾处增加了begin和end
随着有迎来来了新的问题:
PLS-00103: 出现符号 "end-of-file"在需要下列之一时: ; <an identifier> <a double-quoted delimited-identifier>符号 ";" 被替换为 "end-of-file" 后继续。
报错原因:
因为两个update语句之间需要使用;隔开,end结尾处也必须使用;来结束。
以上方法完美解决了李子遇到的Mybatis实现Oracle批量更新sql语句的问题,仅供参考!
李子记录工作期间遇到的问题及解决办法,与大家分析,希望可以帮到大家!(李子能力有限,暂只是提供解决方法,哈哈)