ibatis操作oracle数据库时,如果出现空值,ibatis不是插入NULL,而是出现异常,异常信息大致如下:
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in [someSqlMapFile.xml].
--- The error occurred while applying a parameter map.
--- Check the insertUser-InlineParameterMap.
--- Check the parameter mapping for the '[someProperty]' property.
--- Cause: java.sql.SQLException: 无效的列类型
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:91)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.insert(SqlMapExecutorDelegate.java:447)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.insert(SqlMapSessionImpl.java:82)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.insert(SqlMapClientImpl.java:59)
如果你先插入空值,必须告诉IBatis当该字段出现NULL值该用什么值来替代,方法有2种,如下:
方法一(parameterClass):
1 INSERT INTO TEST(ID, NAME, PASSWD) VALUES (#id#,#name#, #passwd:VARCHAR:NULL#)
支持的类型在 java.sql.Types 中列示出来了
注意:DATA 类型默认不能为NULL
方法二(parameterMap):
使用这个方法时,首先应保证你的Oracle jdbc driver是10G以上版本,不然也是白搭。
1 <parameterMap id="insert-person-paraMap" class="com.unmi.Person" >
2 <parameter property="id"/>
3 <parameter property="name"/>
4 <parameter property="passwd" jdbcType="VARCHAR"/>
5 </parameterMap>
6
7 <!-- 插入一条Person对应的记录到数据库中 -->
8 <insert id="insertPerson" parameterMap="insert-person-paraMap">
9 INSERT INTO PERSON (ID, NAME, PASSWD) VALUES (?,?,?)
10 </insert>
11
参考:http://www.blogjava.net/fatbear/archive/2007/06/07/122607.html iBatis 应用程序向 Oralce 数据表字段插入 NULL 值 作者:肥熊熊