繁体   English   中英

MyBatis NumberFormatException执行查询时

[英]MyBatis NumberFormatException while executing query

使用MyBatis,我有一个SQL,它接收字符串"fr.id_lotacao in (3007, 3008, 3009, 3010)"作为参数。

SQL:

...
<if test="idLotacao != -1">
    and ${idLotacao}
</if>
...

我以这种方式从Java调用:

getDB1SqlSessionTemplate().selectList("sql", MyBatisUtil.createMap("idLotacao", getIdsLotacao(lotacao)));

其中getIdsLotacao(lotacao)返回作为参数传递的字符串。

但是,执行时,MyBatis会引发错误:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 

### Error querying database.  Cause: java.lang.NumberFormatException: For input string: "fr.id_lotacao in (3007, 3008, 3009, 3010)"

用$接收参数时,MyBatis是否不应该用字符串"fr.id_lotacao in (3007, 3008, 3009, 3010)"替换${idLotacao}

我究竟做错了什么? 是什么导致此错误?

有时,即使您正在比较字符串,并且您的参数也是字符串,Mybaits也会返回NFE。

为了解决这个问题,您必须替换以下表达式:

<if test="parameter =='A'"> 
AND YOURCOLUMN IS NOT NULL 
</if>

为了这:

<if test="parameter eq 'A'.toString()"> 
AND YOURCOLUMN IS NOT NULL 
</if>

实际上,您正在将字符串与数字(即-1)进行比较,这会导致数字格式异常。 将-1加上“ -1”之类的引号使其生效

我遇到了Aitor描述的相同问题,并以不同的方式解决了它。 我认为它正在尝试进行数值比较,因为它会将“ A”解析为一个字符。

因此,我交换了单引号和双引号以确保将其解析为字符串。

<if test='parameter =="A"'> 
AND YOURCOLUMN IS NOT NULL 
</if>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM