今天在调用一存储过程中setDate参数过程是出错,查资料才发现setDate的参数必须是java.sql.date类型
代码如下:
CallableStatement cstmt;
try {
cstmt = this.getHibernateTemplate().getSessionFactory().getCurrentSession().connection().prepareCall("{call sp_过程名称(?,?)}");
//查询参数
if(oc.getMadeDate()!=null){
[color=red]cstmt.setDate(1,new java.sql.Date(oc.getMadeDate().getTime()));[/color]
}else{
cstmt.setDate(1,null);
}
//返回参数
cstmt.registerOutParameter(2,Types.VARCHAR);
cstmt.execute();
return cstmt.getString(2);
} catch (Exception e) {
e.printStackTrace();
return "操作失败!";
}
引申了解一下java.util.date与java.sql.date的关系与区别:
继承关系:
java.lang.Object --》 java.util.Date --》 java.sql.Date
具体的转换关系就是
java.sql.Date date=new Java.sql.Date();
java.util.Date d=new java.util.Date (date.getTime());
反过来是一样的
java.util.Date date=new Java.util.Date();
java.sql.Date d=new java.sql.Date (date.getTime());
sql.date,一般是在数据库的时间字段,util.date一般是日常日期字段