"AS" ... "DO" ... "INTO" ... "FROM" ... "WHERE" ... "XML" ... "GROUP" ... "VALUE_caused by: net.s">
赞
踩
错误异常:
Caused by: net.sf.jsqlparser.parser.ParseException: Encountered " "(" "( "" at line 3, column 11. Was expecting one of: <EOF> "AS" ... "DO" ... "INTO" ... "FROM" ... "WHERE" ... "XML" ... "GROUP" ... "VALUE" ... "HAVING" ... "REPLACE" ... "TRUNCATE" ... "CAST" ... "PARTITION" ... "EXTRACT" ... "MATERIALIZED" ... "START" ... "CONNECT" ... "SIBLINGS" ... "COLUMN" ... "NULLS" ... "FIRST" ... "LAST" ... "ROWS" ... "RANGE" ... "FOLLOWING" ...
部分错误异常。如果出现<EOF>
标签内的内容。那么排查错误的方向都差不多。其实大家debug也可以发现问题。
由【net.sf.jsqlparser.JSQLParserException】可看出是因为组装的sql语句解析过程中抛出"非RuntimeException异常",异常被程序捕抓处理且未出现新异常,异常后的代码继续执行,所以不影响一个完整Retrieve操作。而一些"RuntimeException异常",例如:空指针(NullPointerException)、数组越界(IndexOutOfBoundsException)、类型转换(ClassCastException)等会被JVM自动处理,会在console控制台捕抓并打印异常日志。
我的mapper文件是这么写的:
SELECT
dept_name
FROM
blade_dept
WHERE
id IN
<foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
#{ids}
</foreach>
and is_deleted = 0
</select>
一看就会发现是foreach标签出的问题。也就是ids为空。
所以找到谁调用的这个mapper方法。在传参数的时候判断下空值就好了。
虽然我在这里是因为前人写的代码不够严谨报的这个错误。但是大家写SQL的时候尽量不要出现函数套函数这种情况。也有可能会发生这种情况。
可以用<![CDATA[]]>
这样就不会被编译。
简单记录下错误,希望能帮助到大家。如果有不足的或者有其他相似错误解决的还望大家指教。感谢各位观看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。