2014-01-15 109 views
0

我在从列表中的对象获取id值时遇到了问题。我首先在会话中存储用户登录详细信息,并使用这些设置我用来填充列表的查询条件。该列表将只保存一个用户类型的对象。 当我通过调试检查时,该列表正在填充正确的细节,但是当我尝试迭代列表以获取存储在列表中的对象的id值时,我的代码甚至不会输入for循环。 id值是查询获得的用户的ID。 以下是我的代码片段:从包含jsp对象的arrayList中获取对象的int值

 HttpSession session1 = request.getSession(); 

     LoggedUser lu = (LoggedUser) session1.getAttribute("logged"); 

     String uname = lu.getUserName(); 
     String pword = lu.getPass(); 


     List<Users> ulist = session.createSQLQuery("Select * From Users WHERE Username = '" + uname + "'" + " AND Password = " + "'" + pword+ "'").list(); 

     int uid = 0; // up until here everything works fine with debugging 

     for(Users user : ulist) 
     { 
      uid = user.getId(); 
     } 

谁能帮助?使用Hibernate的标准像这样

+3

请不要通过串联的字符串查询来实现您的登录。这是一个很大的安全漏洞。查看SQL注入。您应该使用命名的查询参数。 – kostja

+0

你是对的,但是为了简单起见,我要求我执行这项任务。一旦用户登录了他的用户名和密码并存储在上面的代码中,我就会调用这些详细信息,以便将当前登录用户的用户发布和用户标识添加到数据库中,以便稍后显示当前的RSS提要登录的用户。 有没有办法如何从上述代码中获取id值? – Maeglin77

+0

除了Hibernate部分外,它对我来说看起来很合适。如果循环从未输入,则列表必须为空。例如,您可以通过打印列表大小来知道。 – kostja

回答

0

开始,

List<Users> ulist = (List<Users>) session.createCriteria(Users.class) 
        .add(Restrictions.eq("username", uname)) 
        .add(Restrictions.eq("password", pword)).list(); 

还有什么是你的用户类ID的数据类型?如果是INT,

if(null != ulist && ulist.size() > 0){ 
    int uid = 0; 

    for(Users user : ulist) 
    { 
     uid = user.getId(); 
    } 
} 

更新

无处不在,你需要检查空。否则你可能遇到很多空指针异常。

LoggedUser lu = (LoggedUser) session1.getAttribute("logged"); 
String uname = ""; 
String pword = ""; 
if(null != session1.getAttribute("logged")){ 
    uname = lu.getUserName(); 
    pword = lu.getPass(); 
} 

希望这会有所帮助。

+0

这工作完美,非常感谢! – Maeglin77

+0

不客气。 –

相关问题