[英]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.