2017-02-28 60 views
0

我正在尝试编写一个函数,该函数返回表中特定用户的所有old_password值。 但是,我不知道如何正确格式化。Java中的查询函数,返回单列中所有值的列表

public List<String> fetchPasswordHistory(int userId) { 
     String query = "SELECT NEW_PASSWORD FROM PASSWORD_HISTORY WHERE USER_ID = ?"; 
     List<String> strLst = jdbcTemplate.query(query,new RowMapper<String>() { 
      @Override 
      public String mapRow(ResultSet rs, int rowNum) throws SQLException { 
       return rs.getString(3); 
      } 
     }, userId); 

     if (strLst.isEmpty()) { 
      return null; 
     } 
     else { 
      return strLst; 
     } 
    } 

这将给出表中前3个字符串。我希望它返回从该查询生成的每个值。 ,然后我将比较用户的待处理新密码与数据库中的所有旧密码,以便用户不重复密码。

此外,如果查询不返回任何内容,则会中断。 有什么帮助吗?

+0

我建议返回null而不是空的列表是违反行为。 – khelwood

+0

在'if(strLst.isEmpty())'是NPE吗?如果是这样,那么'if(null == strList || strLst.isEmpty())' – Vadim

回答

0

根据我的经验,这个查询应该失败,因为在mapRow方法中,你要求的是当前行的第3列。但在“select”语句中,您只能获得一列。所以,你应该写rs.getString(1)(它不是基于零的,所以1会返回第一列的值)。

而且,据我所见,你实际上并没有将结果限制为3行。您将获得查询的所有行。每行都会执行mapRow,您将提取密码列表。

+0

好吧,我应该如何格式化它,如果我想每个与该用户ID相关的New_password值? – user7470849

+0

它已经可以,只需将getString(3)更改为getString(1) – Igor

相关问题