簡體   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