5 string comparison jpa equals jpql
我使用JPQL查询编写了一个简单的登录系统,它总是不返回结果:
public boolean check(String name, String password) {
final String qstring="SELECT e FROM Muser e WHERE e.name = '"+name+"'";
Muser user;
try{
user = em.createQuery(qstring, Muser.class).getSingleResult();
}
catch(NoResultException e){
return false;
}
return password.equals(user.getPassword());
}
Run Code Online (Sandbox Code Playgroud)
当我将其更改为本机查询时:
user = (Muser) em.createNativeQuery(qstring, Muser.class).getSingleResult();
Run Code Online (Sandbox Code Playgroud)
或者一个int表达式:
final String qstring="SELECT e FROM Muser e WHERE e.id = "+id;
Run Code Online (Sandbox Code Playgroud)
没事.有什么问题?太感谢了!
这可能是 JPA 提供程序中字符串比较的问题。您是否对区分大小写的数据进行测试?
您还可以尝试(这是首选方式)使用参数,而不是手动编写语句。它不仅更安全(防止 SQL 注入)而且更快:不仅对于 Java(不需要连接字符串)而且对于 DB(可以为所有执行准备一次查询)。可能是这样的:
final String qstring = "SELECT e FROM Muser e WHERE e.name = :name";
TypedQuery<Muser> query = em.createQuery(qstring, Muser.class);
query.setParameter("name", name);
user = query.getSingleResult();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11065 次 |
最近记录: |