gpt4 book ai didi

string - JPA 字符串比较

转载 作者:行者123 更新时间:2023-12-01 23:51:19 26 4
gpt4 key购买 nike

我使用 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());
}

当我将其更改为 native 查询时:

user = (Muser) em.createNativeQuery(qstring, Muser.class).getSingleResult();

或 int 表达式:

final String qstring="SELECT e FROM Muser e WHERE e.id = "+id; 

一切顺利。有什么问题?谢谢一百万!

最佳答案

这可能是您的 JPA 提供程序中的字符串比较问题。您是否在区分大小写的数据上进行测试?

您还可以尝试(这是首选方式)使用参数,而不是手动编写语句。它不仅更安全(防止 SQL 注入(inject)),而且更快:不仅对于 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();

关于string - JPA 字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8061042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com