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 ...
在Oracle中,游标通常用于处理复杂的查询结果集,特别是在需要逐行处理数据的情况下。 **示例代码:** ```sql DECLARE CURSOR cur_employees IS SELECT employee_id, first_name, last_name FROM employees ...
hiredate DATE NOT NULL ); ``` - **创建序列**: ```sql CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1 MINVALUE 1 NO MAXVALUE NO CYCLE NO CACHE; ``` - **编写对象关系映射文件**: ```...
IBatisNet数据映射器会自动把int.MinValue转换为NULL插入到数据库,而从数据库中获得NULL时,也会转化为C#的int.MinValue。这样,程序就要对int.MinVaue这个值进行特殊处理,例如不能把int.MinValue直接显示在...
时间类型转换:在Java中,处理时间类型通常会用到Date、Calendar、LocalDate等类,并且需要进行相应的类型转换。 阶乘:一个正整数的阶乘是所有小于及等于该数的正整数的积。 UE和UI的区别:UE是指用户体验(User ...
IBatisNet数据映射器会自动把int.MinValue转换为NULL插入到数据库,而从数据库中获得NULL时,也会转化为C#的int.MinValue。这样,程序就要对int.MinVaue这个值进行特殊处理,例如不能把int.MinValue直接显示在...
- NUMBER、VARCHAR2、DATE等。 ##### id、rowid、rownum的区别 - **id**:通常作为主键标识记录。 - **rowid**:Oracle特有的唯一标识符。 - **rownum**:按顺序为查询结果行编号。 ##### 主键和唯一索引的区别? ...
- **exception**:异常对象,在错误处理页面中可用。 ##### Forword(请求转发)与Redirect(重定向) - **转发(forward)**:服务器内部操作,只发生一次请求,地址栏不会改变。 - **重定向(redirect)**:客户端操作,...
IBatisNet数据映射器会自动把int.MinValue转换为NULL插入到数据库,而从数据库中获得NULL时,也会转化为C#的int.MinValue。这样,程序就要对int.MinVaue这个值进行特殊处理,例如不能把int.MinValue直接显示在...