ibatis想oracle中插入date类型数据,当为null时报无效的列类型错误。google一番后,按照[url]http://www.mail-archive.com/user-java@ibatis.apache.org/msg06316.html[/url]中的方法,copy之,然后在sqlmapconfig.xml中注册该typehandler,
<typeHandler
callback="yourpacakge.OracleDateTypeHandler"
javaType="java.util.Date" />
问题解决。但是打印出来的insert sql语句中date值变成了该date的引用值.对copy来的代码做些修改,修改后代码:
今天改用parametermap进行insert操作时,报oracle sql无效字符错误,google的结果大都是要去掉insert语句的分号,可是我的insert根本就没分号。无奈将原来用
#parameter#表示的地方改用?代替,问题解决。原来用parametermap的时候ibatis规定sql中要用?,而且这种方式是不被推荐的。参数设置个人推荐使用hashmap,灵活方便。
<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,灵活方便。