有人可以帮我查看我的查询有什么问题吗?
Java代码:
public boolean fValidLogin(String fUsername, String fPassword) {
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session session = sf.openSession();
String query = "SELECT fusername,fpassword FROM flogin WHERE fusername=" + fUsername + " AND fpassword=" + fPassword + "";
Query DBquery = session.createQuery(query);
for (Iterator it = DBquery.iterate(); it.hasNext();) {
it.next();
count++;
}
System.out.println("Total rows: " + count);
if (count == 1) {
return true;
} else {
return false;
}
}
MYSQL代码:
SELECT fusername,fpassword FROM flogin WHERE fusername="SAS" AND fpassword="Sas123"
答案 0 :(得分:0)
您的查询是 SQL注入的受害者,它也可能导致语法错误,而您必须将setParameter与JPQL查询一起使用:< / p>
String query = "SELECT f FROM flogin f WHERE f.fusername = ? AND f.fpassword = ?";
Query dBquery = session.createQuery(query);
dBquery.setParameter(0, fUsername);//set username variable
dBquery.setParameter(1, fPassword);//set password variable
要获得结果,您只需拨打Query::list()
即可int count = dBquery.list().size();
或者只是:
return dBquery.list().size() == 1;
您的查询中的真正问题是字符串应该在两个引号之间(但我不建议使用解决方案)
fusername='" + fUsername + "'
//--------^_________________^
注意:您的查询不是JPQL查询,如果您必须使用session.createNativeQuery(query);
,它似乎是本机查询。
答案 1 :(得分:0)
首先尝试:
"SELECT fusername,fpassword FROM flogin WHERE fusername=\"" + fUsername + "\" AND fpassword=\"" +fPassword +"\""
顺便说一下,你要使用原生查询。也许您应该考虑使用“createNativeQuery”而不是“createQuery”