Java天空

 

ibatis操作oracle数据库时,空值(null)异常的不完全解决方法

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 值
            作者:肥熊熊

posted on 2007-08-16 16:18 YY 阅读(4255) 评论(1)  编辑  收藏 所属分类: ibatis

评论

# re: ibatis操作oracle数据库时,空值(null)异常的不完全解决方法 2007-08-16 16:36 游戏天下

学习中。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

友情链接

搜索

最新评论

阅读排行榜

评论排行榜