如何使用hibernate从mysql获取当前日期数据列表?

xyhw6mcr  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(260)
public <E> List viewc(String a,String c) {      
        List l1=new ArrayList();
        try {
            con = utilimpl.openSession();
            if(con != null)
            {
              st =  con.beginTransaction();
               Query q=con.createQuery("FROM "+a+"  WHERE cdate="+c+"");
                l1=q.list();
               st.commit();
              }
            else
            {
                System.out.println("no connection found!!");
            }

        } catch (HibernateException e) {
            e.printStackTrace();
            if(st != null)
            { 
                st.rollback();
            }
        }
        return l1;

        }

下面的代码是servlet的doget方法代码。我想得到数据列表。cdate是我数据库的列,datatype是mysql中的timestamp。

SimpleDateFormat k=new SimpleDateFormat("yyyy-MM-dd");
    Date s=new Date();
    String c=k.format(s);       
    List<userModel> ln=d.viewc("userModel",c);
    request.setAttribute("list",ln);
c9x0cxw0

c9x0cxw01#

由于cdate是timestamp类型,它由日期+时间组成,并且您试图仅用相等的值比较超过日期的部分。
尝试以下操作:

Query q=con.createQuery("FROM "+a+"  WHERE DATE(cdate)=DATE("+c+")");

编辑:为了使比较工作,c和cdate的值应该采用相同的格式。为了实现这一点,可以对查询进行如下修改:

Query q=con.createQuery("FROM "+a+"  WHERE DATE_FORMAT(DATE(cdate),'%Y-%m-%d')="+c);

此处c的格式应为:“yyyy-mm-dd”,例如“2019-01-19”
date\格式将结果日期转换为所需的字符串格式,现在与'c'的比较应该是正确的。

相关问题