oracle中date类型作为查询条件的处理方法(菜鸟版)

Oracle数据库中表的字段设置为:date类型(这里我不需要时间,因此采用了date型,如果需要时间似乎应采用timestamp类型);

模型层表对应的pojo类及hibernate映射文件中属性的类型为java.util.Date

表现层采用Dorado处理,dataset中相应的字段也设置为:date类型;

利用MyEclipse中自带的hibernate逆向工程自动生成DAO类。

 

在通过以上配置调用DAO中的方法,进行以date类型属性作为查询条件进行查询时,会产生以下错误:

       ORA-01858: 在要求输入数字处找到非数字字符 

    个人认为是由于date类型的格式问题导致的,即查询条件中的日期格式与数据库中的格式不一致。因为可以看到,由表现层传到BO层的Date对象为:“Wed Jul 28 13:09:40 CST 2010而数据库中存储的为2010-7-28”,所以考虑转换时间格式。

    我采用了以下方法处理该问题:

    1、在DAO类中添加利用该属性检索实例的查询方法

public List findByFailueDate (String FailueDate) {

       log.debug("finding by FailueDate");

       try {

          

           String queryString = "from MachineMaintenance as mm where mm.failureTime = to_date('"+FailueDate+"','yyyy-mm-dd')";

           List list = new ArrayList();

           list = getHibernateTemplate().find(queryString);

           return list;

       } catch (RuntimeException re) {

           log.error("find by FailueDate failed", re);

           throw re;

       }

    }

    to_dateoracle中的函数,要特别注意的是如果需要时间,那么to_date中的参数应为:“yyyy-mm-dd hh-mi-ss”,因为oracle中不区分大小写的,所以分钟不应该用mm,而改为mi。

    可以看到该查询方法的形参为String型而不是Date型。

   2、BO处理类中,得到界面层传入的Date对象dprintln输出为:“Wed Jul 28 13:09:40 CST 2010,通过SimpleDateFormatd转化为String类型的date对象:   

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

String date = sdf.format(d);

List list = xxxxDAO.findByFailueDate(date);

   3、而后将date作为参数,调用DAO中的方法进行查询。顺利得到了想要得到的查询结果。

    请各位高手多多指教啊,我是菜鸟,可能处理上走了很多弯路,不过总算是自己走通了,虽然方法笨了点儿。

你可能感兴趣的:(DAO,oracle,Hibernate,MyEclipse)