我正在尝试制定一种更通用的登录方法。
public boolean login(String login, String pass)
throws ClassNotFoundException, SQLException {
open();
q = s.createQuery("select u from Usuario u
where u.login =:id1 and u.pass = :id2");
q.setString("id1", login);
q.setString("id2", pass);
if(q.uniqueResult()!=null)
return true;
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
我的代码运行得很好,但现在我想做一些类似的事情:
public boolean login(String login, String pass)
throws ClassNotFoundException, SQLException {
return paramFunction("select u from Usuario u
where u.login = ?1 and u.pass=?2", login, pass);
}
public boolean paramFunction(String query, Object... params){
try {
open();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
q = s.createQuery(query);
for (int i = 1; i <= params.length; i++) {
q.setParameter(i, params[i-1]);}
if (q.uniqueResult() != null)
return true;
else
return false;
Run Code Online (Sandbox Code Playgroud)
但现在我得到:
java.lang.IndexOutOfBoundsException:记住序数参数是从 1 开始的!
尽管您可以看到我使用的是基于 1 的方法。我正在做的事情有什么问题吗?
谢谢您的帮助!
实际上,在 Hibernate 中参数是从 0 开始的。请参阅文档。
position - the position of the parameter in the query string, numbered from 0.
Run Code Online (Sandbox Code Playgroud)