2015-04-07 64 views
0

我試圖以檢索使用SQL查詢語句爲什麼Spring RowMapper僅返回結果集中的最後一條記錄?

"Select ADMIN_USER.ID UserID, ADMIN_USER.USER_NAME Name, ADMIN_USER.PASSWORD Password, ADMIN_USER.FULL_NAME fullName , ADMIN_USER.PRIVILEGE, ADMIN_USER.PROVIDER_ID ,PROVIDERS.ID providerID,PROVIDERS.USER_NAME provider from ADMIN_USER,PROVIDERS where ADMIN_USER.PROVIDER_ID=PROVIDERS.ID",

2個數據庫表(ADMIN_USER和提供商)(即具有提供商的用戶),這是我的方法 `公開名單getUsers(){

return DS.query(sqlQuery,new RowMapper<User>() { 

         public User mapRow(ResultSet rs, int rowNum) 
           throws SQLException { 

          User user = new User(); 
          user.setId(rs.getInt("UserID")); 
          user.setUserName(rs.getString("Name")); 
          user.setPassword(rs.getString("Password")); 
          user.setFullName(rs.getString("fullName")); 
          user.setPrivilage(rs.getString("PRIVILEGE")); 

          Provider provider=new Provider(); 
          provider.setId(rs.getInt("providerID")); 
          provider.setName(rs.getString("provider")); 
          user.setProvider(provider); 

          return user; }}); }` 

但它只返回來自Method(結果集)的最後一條記錄,因爲list.size()顯示size = 1而不是4!

我認爲連接是正確的,因爲結果記錄顯示正確的連接,但我認爲在RowMapper中的問題?

是否有另一種方法或方法來從2個連接的表中檢索數據(使用Spring,JDBC,NamedParameterJdbcTemplate)?

在此先感謝

+0

你有測試此查詢的Java之外看到它返回你期望的結果?另外,什麼是DS?如果您使用的是spring,我可以向您展示一個使用jdbcTemplate的示例。 – EricF

+0

是的,我測試了它,效果很好 - DS是NamedParameterJdbcTemplate對象---請如果你有一個使用多個表的例子給我,並試圖告訴我這個結果的原因? –

回答

0

這裏是您嘗試使用完成的任務爲例春天的是NamedParameterJdbcTemplate

public class UserRepo { 

    private NamedParameterJdbcTemplate jdbcTemplate; 

    private static final String sqlQuery = "Your query here"; 


    //Assuming you are using spring and have a datasource bean defined named datasource 
    @Autowired 
    public UserRepo(Datasource datasource) { 
     this.jdbcTemplate = new NamedParameterJdbcTemplate(datasource); 
    } 

    public List<User> getUsers() { 
     List<User> results = jdbcTemplate.query(sqlQuery, new UserMapper()); 
    } 

    private static final class UserMapper implements 
       RowMapper<User> { 

     mapRow(ResultSet rs, int rowNum) throws SQLException { 

     User user = new User(); 
     user.setId(rs.getInt("UserID")); 
     user.setUserName(rs.getString("Name")); 
     user.setPassword(rs.getString("Password")); 
     user.setFullName(rs.getString("fullName")); 
     user.setPrivilage(rs.getString("PRIVILEGE")); 

     Provider provider=new Provider(); 
     provider.setId(rs.getInt("providerID")); 
     provider.setName(rs.getString("provider")); 
     user.setProvider(provider); 

     return user;  
     } 
    } 
} 
+0

只要確保sql語句中的所有列名稱別名與您試圖將其映射到rowMapper中的內容相匹配即可。 – EricF

+0

IT與返回最後一條記錄的結果相同,返回列表的大小爲1而不是4 @Ericf –

相關問題