我有以下方法,使用Hibernate,这让我疯狂。它没有正确更新我的数据库,我看不出有什么问题。任何人都可以帮我这个吗?
public boolean changePassword(String username, String password) {
HttpServletRequest request = ServletActionContext.getRequest();
SessionFactory sessionFactory = (SessionFactory) request.getSession()
.getServletContext().getAttribute("sessionFactory");
Session session = sessionFactory.openSession();
try {
request = ServletActionContext.getRequest();
Query myQuery = session.createQuery("update Administrator "
+ "set password = " + password + " where username = "
+ username);
if (myQuery.executeUpdate() == 1) {
return true;
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
return false;
}
以下是我在控制台中的内容:
Hibernate: update login set password=password1 where username=frank
could not execute update query
答案 0 :(得分:3)
尝试使用参数化查询来解决此问题。
Query myQuery = session.createQuery("update Administrator "
+ "set password = :password where username = :username");
我认为设置参数的代码是
myQuery.setParameter("username", username);
myQuery.setParameter("password", password);
答案 1 :(得分:0)
参数值是否应该被转义?另外:为什么不使用setParameter()
而不是手工构建整个查询?它会为你做所有必要的逃避。代码可以是:
Query q = session.createQuery("update Administrator set password =\
:password where username = :username");
q.setParameter("password", password);
q.setParameter("username", username);