mybatis的条件test语句当与单个字符比较时报NumberFormatException: For input string问题...
2015-07-21 16:02
309 查看
错误描述:
<select id="sqlId" resultType="net.test.Statement"> select * from table where TRUE <if test="type == 'A'"> AND column = #{column} </if> </select>
当使用的type为A时,这段便抛出一个NumberFormatExeption的异常,但是如果index为一个数值比如1时就运行正常。
错误:
Caused by: java.lang.NumberFormatException: For input string: "A" at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at java.lang.Double.parseDouble(Unknown Source) at org.apache.ibatis.ognl.OgnlOps.doubleValue(OgnlOps.java:248) at org.apache.ibatis.ognl.OgnlOps.compareWithConversion(OgnlOps.java:137) at org.apache.ibatis.ognl.OgnlOps.isEqual(OgnlOps.java:178) at org.apache.ibatis.ognl.OgnlOps.equal(OgnlOps.java:548) at org.apache.ibatis.ognl.ASTEq.getValueBody(ASTEq.java:49) at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:175) at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:213) at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:314) at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:394) at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:435) at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:414) at org.apache.ibatis.builder.xml.dynamic.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:17) at org.apache.ibatis.builder.xml.dynamic.IfSqlNode.apply(IfSqlNode.java:15) at org.apache.ibatis.builder.xml.dynamic.MixedSqlNode.apply(MixedSqlNode.java:14) at org.apache.ibatis.builder.xml.dynamic.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:22) at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:198) at org.apache.ibatis.executor.BaseExecutor.createCacheKey(BaseExecutor.java:115) at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:90) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:72) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:75)
解决方案:
1.改为:test = "type eq 'A'.toString()"
2.原因是OGNL语法的问题:
这里 'A' 将被认为是 char 类型,但是 'AA' 或者 "A" 将被作为String类型。
所以我们可以用转义:<if test="type == "A"">
3.或者将 <if test="type == 'A'"> 改为 <if test='type == "A"'>。
相关文章推荐
- 使用mybatis遇到的关于条件查询">"以及if test传参的使用问题
- MyBatis 判断条件为等于的问题(<if test="type == '1'.toString()"> xxx </if>
- sql比较字符的,Mybatis中遇到的符号转化,sql比较语句问题!
- Mybatis查询语句中的条件判断问题
- perl grep在条件语句中使用遇到的问题
- 解决mybatis执行SQL语句部分参数返回NULL问题
- 分隔符不是单个字符事load数据的问题。
- mybatis 写sql语句 rownuma条件
- mybatis调用orcale存储过程-传入多个参数返回单个字符
- Mybatis偶遇“必须执行该语句才能获得结果”问题的解决办法
- mybatis执行insert语句,如何返回主键给对象的问题(限主键为整数类型)
- Oracle把逗号分割的字符串转换为可放入in的条件语句的字符数列
- mybatis foreach in查询语句 关于逗号 空值处理问题
- mybatis中写sql语句时需要转义的字符
- C/C++经典问题:[未输入字符,输入语句被直接跳过] 的多种解决方案
- mybatis if test加筛选条件
- 关于mybatis插件tk.mybatis生成的动态sql语句字段不加``的问题
- SQL语句中条件里需要有单引号问题
- Mybatis的if test字符串比较问题
- delphi中使用sql语句加条件引用时值是一个整型变量的问题