处理ibatis中oracle date为null的问题

ibatis想oracle中插入date类型数据,当为null时报无效的列类型错误。google一番后,按照 http://www.mail-archive.com/[email protected]/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,灵活方便。

你可能感兴趣的:(java,oracle,sql,ibatis,Google)