`
jasin2008
  • 浏览: 70043 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

处理ibatis中oracle date为null的问题

阅读更多
ibatis想oracle中插入date类型数据,当为null时报无效的列类型错误。google一番后,按照http://www.mail-archive.com/user-java@ibatis.apache.org/msg06316.html中的方法,copy之,然后在sqlmapconfig.xml中注册该typehandler,
<typeHandler
        callback="yourpacakge.OracleDateTypeHandler"
        javaType="java.util.Date" />
问题解决。但是打印出来的insert sql语句中date值变成了该date的引用值.对copy来的代码做些修改,修改后代码:

package yourpacakge;

import com.ibatis.sqlmap.client.extensions.ParameterSetter;
import com.ibatis.sqlmap.client.extensions.ResultGetter;
import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
public class OracleDateTypeHandler implements TypeHandlerCallback {

    public void setParameter(ParameterSetter setter, Object parameter) throws
            SQLException {
        if (parameter == null) {
            setter.setNull(oracle.jdbc.OracleTypes.DATE);
        } else {
            Date date = (Date) parameter;
            //DATE oracleDate = new DATE(new Timestamp(date.getTime()));
            //setter.setObject(oracleDate);
//修改后
            setter.setObject(new Timestamp(date.getTime()));
        }
    }

    public Object getResult(ResultGetter getter) throws SQLException {
        Timestamp value = getter.getTimestamp();
        //增加对value的null值判断
        if (getter.wasNull()||value==null) {
            return null;
        }        
        return new Date(value.getTime());

    }

    public Object valueOf(String s) {
        return s;
    }
}


    今天改用parametermap进行insert操作时,报oracle sql无效字符错误,google的结果大都是要去掉insert语句的分号,可是我的insert根本就没分号。无奈将原来用
#parameter#表示的地方改用?代替,问题解决。原来用parametermap的时候ibatis规定sql中要用?,而且这种方式是不被推荐的。参数设置个人推荐使用hashmap,灵活方便。
分享到:
评论

相关推荐

    数据库知识

    `birth` DATE NOT NULL, `score` INT(6) ); -- 插入数据 INSERT INTO student (name, birth, score) VALUES ('lanp', NOW(), 30); INSERT INTO student (name, birth, score) VALUES ('ph', 'ph', 40); INSERT ...

    J2EE与数据库.docx

    在Oracle中,游标通常用于处理复杂的查询结果集,特别是在需要逐行处理数据的情况下。 **示例代码:** ```sql DECLARE CURSOR cur_employees IS SELECT employee_id, first_name, last_name FROM employees ...

    韩顺平hibernate笔记

    hiredate DATE NOT NULL ); ``` - **创建序列**: ```sql CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1 MINVALUE 1 NO MAXVALUE NO CYCLE NO CACHE; ``` - **编写对象关系映射文件**: ```...

    AppFramework_V1.0

    IBatisNet数据映射器会自动把int.MinValue转换为NULL插入到数据库,而从数据库中获得NULL时,也会转化为C#的int.MinValue。这样,程序就要对int.MinVaue这个值进行特殊处理,例如不能把int.MinValue直接显示在...

    java必备知识点大全.pdf

    时间类型转换:在Java中,处理时间类型通常会用到Date、Calendar、LocalDate等类,并且需要进行相应的类型转换。 阶乘:一个正整数的阶乘是所有小于及等于该数的正整数的积。 UE和UI的区别:UE是指用户体验(User ...

    AppFramework_V1.0_New

    IBatisNet数据映射器会自动把int.MinValue转换为NULL插入到数据库,而从数据库中获得NULL时,也会转化为C#的int.MinValue。这样,程序就要对int.MinVaue这个值进行特殊处理,例如不能把int.MinValue直接显示在...

    自整理Java关于基础和框架的面试题

    - NUMBER、VARCHAR2、DATE等。 ##### id、rowid、rownum的区别 - **id**:通常作为主键标识记录。 - **rowid**:Oracle特有的唯一标识符。 - **rownum**:按顺序为查询结果行编号。 ##### 主键和唯一索引的区别? ...

    java面试知识

    - **exception**:异常对象,在错误处理页面中可用。 ##### Forword(请求转发)与Redirect(重定向) - **转发(forward)**:服务器内部操作,只发生一次请求,地址栏不会改变。 - **重定向(redirect)**:客户端操作,...

    AppFramework数据库访问组件_代码生成插件_V1.1.rar

    IBatisNet数据映射器会自动把int.MinValue转换为NULL插入到数据库,而从数据库中获得NULL时,也会转化为C#的int.MinValue。这样,程序就要对int.MinVaue这个值进行特殊处理,例如不能把int.MinValue直接显示在...

Global site tag (gtag.js) - Google Analytics