有人可以帮我看看我的查询有什么问题吗?
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"
先试试这个:
"SELECT fusername,fpassword FROM flogin WHERE fusername=\"" + fUsername + "\" AND fpassword=\"" +fPassword +"\""
顺便说一句,你要使用本机查询。也许您应该考虑使用“createNativeQuery”而不是“createQuery”
您的查询是SQL注入的受害者,它也可能导致语法错误,而您必须使用带有JPQL查询的setParameter:
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
要获得结果数量,您可以调用qazxsw poi
Query::list()
要不就 :
int count = dBquery.list().size();
您的查询中的真正问题是字符串应该在两个引号之间(但我不建议使用解决方案)
return dBquery.list().size() == 1;
注意:您的查询不是JPQL查询,它似乎是本机查询,如果您必须使用fusername='" + fUsername + "'
//--------^_________________^
。