您的位置:首页 > 编程语言 > Java开发

Cause: java.sql.SQLException: 无效的列类型: 1111(Mybatis中insert插入空值时,需要指定JdbcType)

2017-12-06 22:30 946 查看


夜晚福利来啦,看这美女写博客,要的就是这个feel!!!

今天在工作中使用mybatis,在insert向表中插入值时候,遇到一个问题.幸得下面这位博主的文章,问题圆满解决,先将内容整理如下;

首先感谢博主makemyownlife

一.异常再现

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


二.异常原因

MyBatis 插入空值时,需要指定JdbcType
mybatis insert空值报空值异常,但是在pl/sql不会提示错误,主要原因是mybatis无法进行转换,


我当时业务是记录订单信息,故涉及插入null值,而我并没有指定jdbcType,进而导致报错;

三.相关代码

1.修改之前的xml文件

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>


2.修改后的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>


3.Mybatis JdbcType与Oracle、MySql数据类型对应列表

java.sql.Types 值Java 类型IBM DB2OracleSybaseSQLInformixIBM Content Manager
BIGINTjava.lang.longBIGINTNUMBER (38, 0)BIGINTBIGINTINT8DK_CM_BIGINT
BINARYbyte[]CHAR FOR BIT DATARAWBINARYIMAGEBYTEDK_CM_BLOB
BITjava.lang.BooleanN/ABITBITBITBITDK_CM_SMALLINT
BLOBbyte[]BLOBBLOBBLOBBLOBBLOBDK_CM_BLOB
CHARjava.lang.StringCHAR, GRAPHICCHARCHARCHARCHARDK_CM_CHAR
CLOBjava.lang.StringCLOB, DBCLOBCLOBCLOBCLOBCLOBDK_CM_CLOB
DATEjava.sql.Dat
4000
e
DATEDATEDATEDATEDATEDK_CM_DATE
DECIMALjava.math.BigDecimalDECIMALNUMBERDECIMAL, MONEY, SMALLMONEYDECIMALDECIMALDK_CM_DECIMAL
DOUBLEjava.lang.DoubleDOUBLEDOUBLE PRECISIONDOUBLE PRECISIONDOUBLE PRECISIONDOUBLE PRECISIONDK_CM_DOUBLE
FLOATjava.lang.DoubleFLOATFLOATFLOATFLOATFLOATDK_CM_DOUBLE
INTEGERjava.lang.IntegerINTEGERINTEGERINTINTEGERINTEGERDK_CM_INTEGER
JAVA_OBJECTjava.lang.ObjectJAVA_OBJECTJAVA_OBJECTJAVA_OBJECTJAVA_OBJECTOPAQUEN/A
LONGVARBINARYbyte[]LONG VARCHAR FOR BIT DATALONG RAWIMAGEIMAGEBYTEDK_CM_BLOB
LONGVARCHARjava.lang.StringLONG VARCHAR, LONG VARGRAPHICLONGTEXTTEXTTEXTDK_CM_VARCHAR(3500)
NUMERICjava.math.BigDecimalNUMERICNUMBERNUMERICNUMERICNUMERICDK_CM_DECIMAL
OTHERjava.lang.ObjectOTHEROTHEROTHEROTHEROTHERN/A
REALjava.lang.FloatREALREALREALREALREALDK_CM_DOUBLE
SMALLINTjava.lang.IntegerSMALLINTSMALLINTSMALLINTSMALLINTSMALLINTDK_CM_INTEGER
TIMEjava.sql.TimeTIMEDATETIMETIMEDATETIME HOUR TO SECONDDK_CM_TIME
TIMESTAMPjava.sql.TimestampTIMESTAMPDATEDATETIME, SMALLDATETIMEDATETIMEDATETIME YEAR TO FRACTION (5)DK_CM_TIMESTAMP
TINYINTjava.lang.ButeSMALLINTTINYINTTINYINTTINYINTTINYINTDK_CM_INTEGER
VARBINARYbyte[]VARCHAR FOR BIT DATARAWVARBINARYIMAGEBYTEDK_CM_BLOB
VARCHARjava.lang.StringVARCHAR, VARGRAPHICVARCHARVARCHARVARCHARVARCHARDK_CM_VARCHAR
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息