生活随笔 
收集整理的這篇文章主要介紹了
                                
Mybatis中的jdbcType的作用 
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
 
                                
                             
                             
                            2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>  
    Mybatis中的jdbcType的作用  使用MyBatis框架做更新操作時(shí),在該字段需要更新的內(nèi)容為空時(shí),就會(huì)出現(xiàn)1111錯(cuò)誤,也就是無效的列類型,這個(gè)時(shí)候你就要使用jdbcType。至于什么時(shí)候要使用到j(luò)avaType我還沒遇到過,而且我也沒有聽說過要使用javaType。 
前天遇到一個(gè)問題 異常顯示如下:?
 引用
   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?
   對(duì)應(yīng)的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 插入空值時(shí),需要指定JdbcType?  mybatis insert空值報(bào)空值異常,但是在pl/sql不會(huì)提示錯(cuò)誤,主要原因是mybatis無法進(jìn)行轉(zhuǎn)換,?
   所以將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>??   這個(gè)時(shí)候 運(yùn)行正常。?  我不甘心 想試試 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>??   這個(gè)時(shí)候 發(fā)現(xiàn) ibatis2 可以正常的執(zhí)行 數(shù)據(jù)庫可以正常的插入數(shù)據(jù) 。?  錯(cuò)誤日志是在:org.apache.ibatis.type.BaseTypeHandler這個(gè)類的第17行打出的。根據(jù)異常上面的代碼?
 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);?? ??}??   可以看出,是因?yàn)槟銈魅氲膮?shù)的字段為null對(duì)象無法獲取對(duì)應(yīng)的jdbcType類型,而報(bào)的錯(cuò)誤。?  你只要在insert語句中insert的對(duì)象加上jdbcType就可以了,修改如下:?  #{menuTitle,jdbcType=VARCHAR}?  這樣就可以解決以上錯(cuò)誤了。?  看來需要真正的了解mybatis 和ibatis 呀。?  希望遇到同樣問題的朋友一起交流。?  晚上看到了http://wksandy.iteye.com/blog/1443133 感謝 感謝 WKsandy ,他的文字寫得很好?  ?
 引用
 還有在向oracle插入數(shù)據(jù)時(shí),mybatis3報(bào)Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters,是由于參數(shù)出現(xiàn)了null值,對(duì)于Mybatis,如果進(jìn)行操作的時(shí)候,沒有指定jdbcType類型的參數(shù),mybatis默認(rèn)jdbcType.OTHER導(dǎo)致,給參數(shù)加上jdbcType可解決(注意大小寫)?
      
 
轉(zhuǎn)載于:https://my.oschina.net/architectliuyuanyuan/blog/1806447
                            總結(jié) 
                            
                                以上是生活随笔 為你收集整理的Mybatis中的jdbcType的作用 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。