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中的方法进行查询。顺利得到了想要得到的查询结果。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值