日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mybatis中的jdbcType的作用

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis中的jdbcType的作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

Mybatis中的jdbcType的作用

使用MyBatis框架做更新操作時,在該字段需要更新的內容為空時,就會出現1111錯誤,也就是無效的列類型,這個時候你就要使用jdbcType。至于什么時候要使用到javaType我還沒遇到過,而且我也沒有聽說過要使用javaType。

前天遇到一個問題 異常顯示如下:?

引用


Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: Error setting null for parameter #6 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 無效的列類型: 1111?
; uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; 無效的列類型: 1111; nested exception is java.sql.SQLException: 無效的列類型: 1111?



對應的sqlmap如下:?

Xml代碼??

  • <insert?id="insertCustomerLog"?parameterType="map">??
  • ??????insert?into?customer_log??
  • ??????(??
  • ??????ID,??
  • ??????CUSTOMER_SERVICE_USER_NAME,??
  • ??????user_name,??
  • ??????CONTENT,??
  • ??????LOG_FIRST_TYPE,??
  • ??????STATUS,??
  • ??????LINKED_ID,??
  • ??????FEE,??
  • ??????ACCOUNT_FIRST_TYPE,??
  • ??????ACCOUNT_SECOND_TYPE,??
  • ??????ACCOUNT_THIRD_TYPE,??
  • ??????LOG_SECOND_TYPE,??
  • ??????LOG_IP,??
  • ??????MEMO??
  • ??????)??
  • ??????values??
  • ??????(??
  • ?????????????seq_customer_log.nextval?,??
  • ????????????#{customerServiceUserName}?,??
  • ????????????#{username},??
  • ????????????#{content},??
  • ????????????#{logFirstType},??
  • ????????????#{status},??
  • ????????????#{linkedId},??
  • ????????????#{fee},??
  • ????????????#{accountFirstType},??
  • ????????????#{accountSecondType},??
  • ????????????#{accountThirdType},??
  • ????????????#{logSecondType},??
  • ????????????#{logIp},??
  • ????????????#{memo}??
  • ??????)??
  • ??</insert>??


  • 查詢了一下 一些資料說是:?
    ?

    引用


    MyBatis 插入空值時,需要指定JdbcType?
    mybatis insert空值報空值異常,但是在pl/sql不會提示錯誤,主要原因是mybatis無法進行轉換,?



    所以將xml改為:?

    Xml代碼??

  • <insert?id="insertCustomerLog1"?parameterType="com.diyicai.customer.domain.CustomerLog">??
  • ????????insert?into?customer_log??
  • ???????????????(??
  • ???????????????ID,??
  • ???????????????CUSTOMER_SERVICE_USER_NAME,??
  • ???????????????user_name?,??
  • ???????????????CONTENT,??
  • ???????????????LOG_FIRST_TYPE,??
  • ???????????????STATUS,??
  • ???????????????LINKED_ID,??
  • ???????????????FEE,??
  • ???????????????ACCOUNT_FIRST_TYPE,??
  • ???????????????ACCOUNT_SECOND_TYPE,??
  • ???????????????ACCOUNT_THIRD_TYPE,??
  • ???????????????LOG_SECOND_TYPE,??
  • ???????????????LOG_IP,??
  • ???????????????MEMO??
  • ???????????????)??
  • ???????????????values??
  • ???????????????(??
  • ???????????????seq_customer_log.nextval?,??
  • ???????????????#{customerServiceUserName,jdbcType=VARCHAR}?,??
  • ???????????????#{username,jdbcType=VARCHAR},??
  • ???????????????#{content,jdbcType=VARCHAR},??
  • ???????????????#{logFirstType,jdbcType=NUMERIC},??
  • ???????????????#{status,jdbcType=NUMERIC},??
  • ???????????????#{linkedId,jdbcType=VARCHAR},??
  • ???????????????#{fee,jdbcType=NUMERIC},??
  • ???????????????#{accountFirstType,jdbcType=NUMERIC},??
  • ???????????????#{accountSecondType,jdbcType=NUMERIC},??
  • ???????????????#{accountThirdType,jdbcType=NUMERIC},??
  • ???????????????#{logSecondType,jdbcType=NUMERIC},??
  • ???????????????#{logIp,jdbcType=VARCHAR},??
  • ???????????????#{memo,jdbcType=VARCHAR}??
  • ???????????????)??
  • ????</insert>??


  • 這個時候 運行正常。?

    我不甘心 想試試 ibatis2 是否也有同樣的問題?

    xml如下:?

    Xml代碼??

  • <insert?id="BasicUserInfoDaoImpl.testMap"?parameterClass="java.util.HashMap">??
  • ????????????????insert?into?customer_log??
  • ????????????????(??
  • ????????????????ID,??
  • ????????????????CUSTOMER_SERVICE_USER_NAME,??
  • ????????????????user_name,??
  • ????????????????CONTENT,??
  • ????????????????LOG_FIRST_TYPE,??
  • ????????????????STATUS,??
  • ????????????????LINKED_ID,??
  • ????????????????FEE,??
  • ????????????????ACCOUNT_FIRST_TYPE,??
  • ????????????????ACCOUNT_SECOND_TYPE,??
  • ????????????????ACCOUNT_THIRD_TYPE,??
  • ????????????????LOG_SECOND_TYPE,??
  • ????????????????LOG_IP,??
  • ????????????????MEMO??
  • ????????????????)??
  • ????????????????values??
  • ????????????????(??
  • ?????????????????????seq_customer_log.nextval?,??
  • ??????????????????????#customerServiceUserName#?,??
  • ??????????????????????#username#,??
  • ??????????????????????#content#,??
  • ??????????????????????#logFirstType#,??
  • ??????????????????????#status#,??
  • ??????????????????????#linkedId#,??
  • ??????????????????????#fee#,??
  • ??????????????????????#accountFirstType#,??
  • ??????????????????????#accountSecondType#,??
  • ??????????????????????#accountThirdType#,??
  • ??????????????????????#logSecondType#,??
  • ??????????????????????#logIp#,??
  • ??????????????????????#memo#??
  • ????????????????)??
  • ????</insert>??


  • 這個時候 發現 ibatis2 可以正常的執行 數據庫可以正常的插入數據 。?
    錯誤日志是在:org.apache.ibatis.type.BaseTypeHandler這個類的第17行打出的。根據異常上面的代碼?

    Java代碼??

  • if?(parameter?==?null)?{??
  • ??if?(jdbcType?==?null)?{??
  • ??try?{??
  • ??ps.setNull(i,?JdbcType.OTHER.TYPE_CODE);??
  • ??}?catch?(SQLException?e)?{??
  • ??throw?new?TypeException("Error?setting?null?parameter.?Most?JDBC?drivers?require?that?the?JdbcType?must?be?specified?for?all?nullable?parameters.?Cause:?"?+?e,?e);??
  • ??}??
  • ??}?else?{??
  • ??ps.setNull(i,?jdbcType.TYPE_CODE);??
  • ??}??
  • ??}?else?{??
  • ??setNonNullParameter(ps,?i,?parameter,?jdbcType);??
  • ??}??

  • 可以看出,是因為你傳入的參數的字段為null對象無法獲取對應的jdbcType類型,而報的錯誤。?
    你只要在insert語句中insert的對象加上jdbcType就可以了,修改如下:?
    #{menuTitle,jdbcType=VARCHAR}?
    這樣就可以解決以上錯誤了。?
    看來需要真正的了解mybatis 和ibatis 呀。?
    希望遇到同樣問題的朋友一起交流。?


    晚上看到了http://wksandy.iteye.com/blog/1443133 感謝 感謝 WKsandy ,他的文字寫得很好?

    ?

    引用

    還有在向oracle插入數據時,mybatis3報Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters,是由于參數出現了null值,對于Mybatis,如果進行操作的時候,沒有指定jdbcType類型的參數,mybatis默認jdbcType.OTHER導致,給參數加上jdbcType可解決(注意大小寫)?

    轉載于:https://my.oschina.net/architectliuyuanyuan/blog/1806447

    總結

    以上是生活随笔為你收集整理的Mybatis中的jdbcType的作用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。