前段时间做项目,遇到oracle的时间问题头疼了2天,插入时间没有精确到秒,最后问题还是解决,但是什么原因还是不解。
~( O7 T7 D$ ?
oracle数据库时间字段为Date类型,Hibernate中映射字段类型为java.sql.Timestamp,PO中则为java.util.Date不变,
- d0 @0 F, N4 `4 `# H插入时间用new java.sql.Date(new java.util.Date().getTime()),数据库插入的时间没有问题,但是取的时候时间后面却又多了个毫秒,而且值为0,不知何解,要是在重新格式化成String又显示成英文格式的时间。。。。
+ R. [2 V4 E' s' }2 V. g
最后不得已用<fmt:formatDate value="${}" type="both"/>解决了问题,原因不明!
& C" v/ w+ e! y6 {* \) `/ Z5 L' W. ~ m0 M
还有一点需要注意的是formbean上来的数据都是String型,会造成类型不匹配的异常,需要增加个get/set方法
复制内容到剪贴板
代码:
private String savedate;
public String getSavedate() {
java.text.DateFormat dateFormat =new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return dateFormat.format(this.savedate);
}
public void setSavedate(String savedate) throws ParseException {
java.text.DateFormat dateFormat =new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
this.createtime = dateFormat.parse(savedate);
}createtime为需要转换的时间,这里简化了下。
6 k6 W2 s- J! n
$ U q3 w, R5 f3 G$ ?DetachedCriteria时间查询
6 ?9 P- C! ]/ m9 O& k( C: M
action中:
复制内容到剪贴板
代码:
DetachedCriteria detachedCriteria = DetachedCriteria .forClass(Log.class);
String startTime = request.getParameter("startTime");
String endTime = request.getParameter("endTime");
if (startTime != null && endTime != null && startTime.length()>0 && endTime.length()>0) {
if (Tools.isValidDate(startTime) && Tools.isValidDate(endTime)) {
if (Tools.before(startTime, endTime)) {
detachedCriteria.add(Restrictions.between("actTime",
Tools.convertStringToDate(startTime), Tools
.convertStringToDate(endTime)));
} else {
throw new RuntimeException("开始时间不能在结束时间之前!");
}
} else {
throw new RuntimeException("日志记录时间不符合规定的格式!");
}
}
Page page = logService.listSearchLog(pageno, rowsize, orderby,
isReserve, detachedCriteria); daoimp代码如下:
复制内容到剪贴板
代码:
public Page listSearchLog(final int pageno, final int rowsize,
final String orderby, final boolean isReserve,
final DetachedCriteria detachedCriteria)
throws DataAccessException, HibernateException {
return (Page) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException {
Page page = null;
Criteria criteria = detachedCriteria
.getExecutableCriteria(session);
int total = ((Integer) criteria.setProjection(
Projections.rowCount()).uniqueResult()).intValue();
System.out.println("查询用户符合条件的数目为:" + total);
criteria.setProjection(null);
if (total > 0) {
page = new Page();
page.setRowsize(rowsize);
page.setPageno(pageno);
page.setTotalrows(total);
page.excecute();
Criteria result = criteria.setFirstResult(page.getStart())
.setMaxResults(page.getRowsize());
if (orderby != null && orderby.length() > 0) {
if (isReserve) {
result = result.addOrder(Order.desc(orderby));
} else {
result = result.addOrder(Order.asc(orderby));
}
}
List resultList = new ArrayList();
Log log = null;
for (java.util.Iterator it = result.list().iterator(); it
.hasNext();) {
Object[] m = (Object[]) it.next();
if (m.length == 3) {
log = (Log) m[2];
}
if (m.length == 4)
log = (Log) m[3];
resultList.add(log);
}
page.setList(resultList);
}
if (page == null) {
page = Page.getEmptyPage();
}
return page;
}
}, true);
}