无法使用session.createsqlquery()方法用hibernate更新mysql中的datetime类型列

t9aqgxwy  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(325)

这个问题在这里已经有答案了

什么是nullpointerexception,如何修复它(12个答案)
两年前关门了。
我试图通过session.createsqlquery()方法在datetime类型列中插入日期和时间,并获取java.lang.nullpointerexception。
提前谢谢。
控制器类代码:

package dao;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.Query;
import org.springframework.orm.hibernate3.HibernateTemplate;

public class AccountDAO {
    private HibernateTemplate template;
    Session session;
    int returnValue=0;

    public HibernateTemplate getTemplate() {
        return template;
    }
    public void setTemplate(HibernateTemplate template) {
        this.template = template;
    }
    public int insertLogoutTime(int srNum, String userName) {
        System.out.println("------>Inside AccountDAO<------");
        System.out.println("*************-- In insertLogoutTime() Method--************");
        try{
            SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date now = new Date();
            //System.out.println("update login_info set Logout_DateTime ='"+sdfDate.format(now)+"'" +" where SrNum= "+srNum+"");

            Query query=session.createSQLQuery("update login_info set Logout_DateTime =:theDate where SrNum=:srNum");
            query.setParameter("theDate", now);
            query.setParameter("srNum", srNum);
            returnValue= query.executeUpdate();
             System.out.println(returnValue);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return 0;
    }
}

错误:

17:50:21,167 ERROR [STDERR] java.lang.NullPointerException
wyyhbhjk

wyyhbhjk1#

不要像这样构建sql;使用参数:

Query query=session.createSQLQuery("update login_info set Logout_DateTime =:theDate where SrNum=:srNum");
    query.setParameter("theDate", now);
    query.setParameter("srNum", srNum);
    returnValue= query.executeUpdate();
     System.out.println(returnValue);

更新
试试这个:

query.setTimestamp("theDate", now);
    query.setString("srNum", srNum);
pbossiut

pbossiut2#

您没有使用查询参数替换,因此请添加单引号:

Query query=session.createSQLQuery("update login_info set Logout_DateTime 
        ='"+sdfDate.format(now)+"'" +" where SrNum= "+srNum+"");

或使用参数:

Query query=session.createSQLQuery("update login_info set Logout_DateTime = :datetime
 where SrNum= "+srNum+"");
query.setString("datetime", sdfDate.format(now));

在mysql中,通过将值放在单引号中来设置datetime列

相关问题