select to_date('2011-11-28','yyyy-mm-dd')-to_date('2011-11-01','yyyy-mm-dd') from dual
这句sql语句是从oracle数据库中查询两个日期之间的天数,这句在oracle中运行正常,返回一个整数。可是放在dao持久层查询时不能运行。会说找不到dual,可是应该怎样写sql语句呢。
[code="java"]
public int findBeginEndNum(String begintime,String endtime) {
try{
String sql="select to_date('"+endtime+"','yyyy-mm-dd')-to_date('"+begintime+"','yyyy-mm-dd') from dual";
System.out.println(sql);
this.getHibernateTemplate().find(sql); 【运行到这里就报错】
//Object obj=this.getHibernateTemplate().find(sql).get(0);
//if(obj!=null){
// return Integer.parseInt(obj.toString());
//}
}catch(Exception e){
e.printStackTrace();
}
return 0;
}
[/code]
这是以前做过的 你参考下。
1.新建类 Dual
package mypath;
public class Dual implements Serializable{
private Long id;
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id=id;
}
}
2.建立映射文件
dual.hbm.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--可以替换-->
3.注意事项
用 select sysdate from Dual; 返回的数据类型为java.sql.Date; 精度只到天
可以用 select to_char(sysdate,'yyyy-MM-dd hh:mm:ss') from Dual;解决
你的hibernate orm 映射配置文件里面没有 dual的相关相信 再说dual表这个表是虚拟的表,有些系统变量放在里面,没有结构....
java代码实现!(因为你都知道两个日期了 为什么还要去数据库跑一次呢!)
[code="java"]public int findBeginEndNum(String [color=red]begintime[/color],String endtime)[/code]