用的是sybase数据库,需要从数据库中查询记录时间在beginDate和endDate之间的数据,具体的代码如下String hql = "from VlrMeas m where m.id.instanceId=1 and (m.id.measTime>"+beginDate+" and m.id.measTime<="+endDate+")";;其中beginDate和endDate是传入的java.util.Date类型的参数,po中VlrMeas 的measTime也是Date类型,可是当我试图执行这个hql的时候就会发生错误,
传入的beginDate和endDate在拼接好的hql中的形式是“Thu May 28 12:00:24 CST 2009”这个样子。
我需要怎么做才可以让这个hql顺利执行查询出beginDate和endDate之间的时间段的值呢?大家帮我想想办法。
由于我把问题简化了。实际问题比这个东西要复杂很多。所以只能使用这种用String拼接hql的办法。请大家帮帮忙。谢谢啦

解决方案 »

  1.   

    hql不要这么写啊
    你写出这样把
    String hql = "from VlrMeas m where m.id.instanceId=1 and m.id.measTime>:beginDate and m.id.measTime <= :endDate";session.createQuary(hql).setDate("beginDate",beginDate).setDate("endDate", endDate)......
    这样应该就可以啦
      

  2.   

    m.id.measTime是个什么类型的呢?
    首先建议入库时间都是用Date类型,别使用String类型,Hibernate会自动根据方言把Date类型转化成你所用数据库的表现方式的,String会超级的麻烦,而且不利于程序的移植!
    你可以通过DateFormat这个类去进行String和Date类型的转换,最终要得效果是
    m.id.measTime>Date是最理想的也是最适合移植的!
    关于DateFormat怎么用你可以去看看API,很好很强大的辅助类
      

  3.   

    接着楼上的,DateAdd函数
    http://gceclub.sun.com.cn/Java_Docs/jdk6/docs/zh/api/java/text/class-use/DateFormat.html
      

  4.   

    我的这个该死的hql不是想象的那么简单。后面拼接的beginDate和endDate可能有一组或者多组,用楼上的方法没办法做的,你在完全拼接好hql以后没办法知道这个beginDate和endDate会有多少组,有时候根本就没有这个条件,有时候会有多个时间区间需要判断。所以我就希望能弄出我自己的那种直接拼接在hql里去做的谁有好一点的办法----
      

  5.   

    m.id.measTime就是Date类型,映射到habernate里是Date
      

  6.   

    如果是这样,建议你直接将Date类型转换,beginDate.toLocalString(),这样就不会有问题了。