Data truncation: Truncated incorrect DOUBLE value 解決方案


  1.情況限制

  此處的錯誤解決方案只討論

    在使用Mybatis時,傳入數組且使用<foreach>標簽時出現此種報錯;

 

  2.報錯案例

   mapper.java

    /**
     * @Description: 取消驗廠通知
     * SupplierCheckfactoryInformMapper
     * cancelNotifyToCheckFac
     * @param params
     * 2016-8-24 下午3:42:44
     */
    public void cancelNotifyToCheckFac(
          @Param("regId")Integer regId,
          @Param("updateDt")Date updateDt,
          @Param("supplierIds")BigInteger[] supplierIds
         );

 

    mapper.xml

<update id="cancelNotifyToCheckFac">
    UPDATE
        t_supplier_regaccount_info tsri,
        t_supplier_checkfactory_inform tsci
    SET
        status = 2,
        update_dt = #{updateDt}
    WHERE
        tsri.supplier_id = tsci.supplier_id
        AND
        tsri.supplier_id in 
        <foreach collection="supplierIds" item="item" index="index" open="(" separator="," close=")">
            #{supplierIds}
        </foreach>
        AND
        tsri.reg_id = #{regId}
        AND
        tsci.status = 0
</update>

 

    報錯信息:

### Error updating database.  Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '\xAC\xED\x00\x05ur\x00\x17[Ljava.math.BigInteger;\x0E|\xDBF\xE0:`\xC6\x02\x00\x00xp\x00\x00\x00\x01sr\x00\x14java.math.BigIntege'
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: UPDATE   t_supplier_regaccount_info tsri,   t_supplier_checkfactory_inform tsci  SET   status = 2,   update_dt = ?  WHERE   tsri.supplier_id = tsci.supplier_id   AND   tsri.supplier_id in     (          ?    )    AND   tsri.reg_id = ?   AND   tsci.status = 0
### Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '\xAC\xED\x00\x05ur\x00\x17[Ljava.math.BigInteger;\x0E|\xDBF\xE0:`\xC6\x02\x00\x00xp\x00\x00\x00\x01sr\x00\x14java.math.BigIntege'
; SQL []; Data truncation: Truncated incorrect DOUBLE value: '\xAC\xED\x00\x05ur\x00\x17[Ljava.math.BigInteger;\x0E|\xDBF\xE0:`\xC6\x02\x00\x00xp\x00\x00\x00\x01sr\x00\x14java.math.BigIntege'; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '\xAC\xED\x00\x05ur\x00\x17[Ljava.math.BigInteger;\x0E|\xDBF\xE0:`\xC6\x02\x00\x00xp\x00\x00\x00\x01sr\x00\x14java.math.BigIntege'
ERROR 2016-09-18 15:03:17,661  util.web.ExceptionAdvisor: 內部/外部請求人:/admin
ERROR 2016-09-18 15:03:17,661  util.web.ExceptionAdvisor: 請求IP:0:0:0:0:0:0:0:1
ERROR 2016-09-18 15:03:17,662  util.web.ExceptionAdvisor: 請求參數:{supplierId=26};
ERROR 2016-09-18 15:03:17,662  util.web.ExceptionAdvisor: =====service通知結束,繼續向上拋BusinessException=====
 WARN 2016-09-18 15:03:17,669  org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver: Handler execution resulted in exception
common.model.BusinessException: 抱歉,程序內部錯誤,操作失敗! 請稍后再試或與管理員聯系!

 

    3.錯誤分析

    此處的報錯信息:Data truncation: Truncated incorrect DOUBLE value 

      3.1:在網上的主要錯誤原因是:update語句中的set中出現了and關鍵字,而應該使用逗號<,>代替之;這里的報錯不屬於這種情況;

      3.2:此處錯誤原因為:<foreach>標簽中不能使用參數名#{supplierIds},而應該使用#{item},貌似為固定寫法;根本原因尚不明確,待大神指點;

    

    4.代碼修改后

    mapper.xml

<update id="cancelNotifyToCheckFac">
    UPDATE
        t_supplier_regaccount_info tsri,
        t_supplier_checkfactory_inform tsci
    SET
        status = 2,
        update_dt = #{updateDt}
    WHERE
        tsri.supplier_id = tsci.supplier_id
        AND
        tsri.supplier_id in 
        <foreach collection="supplierIds" item="item" index="index" open="(" separator="," close=")">
             #{item} <-- *此處為錯誤原因* --> 
        </foreach>
        AND
        tsri.reg_id = #{regId}
        AND
        tsci.status = 0
</update>

  其他的代碼不做修改;

 

    5.結果

    修改后,可正常更新記錄,不再報錯;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM