问题描述
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语句呢。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;}
解决方案
这是以前做过的 你参考下。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"> <hibernate-mapping> <class name="mypath.Dual" table="DUAL"> <id name="id" type="java.lang.Long" column="ID"> <generator class="sequence"> <!--可以替换--> <param name="sequence"></param> </generator> </id> </class></hibernate-mapping>3.注意事项 用 select sysdate from Dual; 返回的数据类型为java.sql.Date; 精度只到天 可以用 select to_char(sysdate,'yyyy-MM-dd hh:mm:ss') from Dual;解决
解决方案二:
java代码实现!(因为你都知道两个日期了 为什么还要去数据库跑一次呢!)public int findBeginEndNum(String [color=red]begintime[/color],String endtime)
解决方案三:
你的hibernate orm 映射配置文件里面没有 dual的相关相信 再说dual表这个表是虚拟的表,有些系统变量放在里面,没有结构....