MYSQL + Hibernate,无法创建Query

时间:2018-01-01 20:17:22

标签: java mysql hibernate

有人可以帮我查看我的查询有什么问题吗?

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"

2 个答案:

答案 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”