MYSQL + Hibernate,无法创建Query

问题描述 投票:-1回答:2

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

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"
java mysql hibernate
2个回答
0
投票

先试试这个:

"SELECT fusername,fpassword FROM flogin WHERE fusername=\"" + fUsername + "\" AND fpassword=\"" +fPassword +"\"" 

顺便说一句,你要使用本机查询。也许您应该考虑使用“createNativeQuery”而不是“createQuery”


0
投票

您的查询是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 + "' //--------^_________________^

© www.soinside.com 2019 - 2024. All rights reserved.