2017-02-28 58 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

相關問題