2016-03-21 114 views
1

我是JSF/Java和關係數據庫查詢的新手。顯示來自多個表的數據

我想在一個數據表中顯示來自兩個表的數據。

我有兩個表tblUser和tblCity。

對於這些表我有兩個模型用戶和城市。 還有一個UserDAO和一個UserController。

我想知道如何從tblUser中選擇用戶數據並從tblCity中選擇城市數據並在我的視圖中顯示它們。採用MVC風格。

型號:

public class User{ 
    private Integer user_id; 
    private String user_name; 
    private Integer City_id; 

    //getter and setter 
    ... 
} 


public class City{ 
    private Integer city_id; 
    private String city_name; 

    //getter and setter 
    ... 
} 

我的控制器

@ManagedBean 
@SessionScoped 
public List<User> showUser(){ 

    List<User> users = new ArrayList<>(); 
    users= userDAO.showUserList(); 
    return users; 

} 

吾道

@ManagedBean 
@RequestScoped 
public class userDAO{ 

    /** 
    * Creates a new instance of patientDAO 
    */ 
    private final connectToDB con = new connectToDB(); 

    public userDAO() { 
    } 
    public List<User> showUserList() { 

      Connection dbConnection = null; 

      dbConnection = con.getDBConnection(); 

      PreparedStatement pstmt = dbConnection 
        .prepareStatement("select a.user_id, a.user_name, b.city_name" 
          + " from users a, cities b WHERE a.city_id = b.city_id"); 
      ResultSet rs = pstmt.executeQuery(); 

      List<User> users = new ArrayList<>(); 
      List<City> cities = new ArrayList<>(); 

      while (rs.next()) { 

       User user = new User(); 
       City city = new City(); 

       user.setUser_Id(rs.getInt("user_id")); 
       user.setUser_Id(rs.getString("user_name")); 

       city.setCity_Name(rs.getInt("city_name"));  


       users.add(user); 
       cities.add(city); 
      } 
      // close resources 
      rs.close(); 
      pstmt.close(); 

      dbConnection.close(); 


      return users; 
     } 
} 

我查看

<p:dataTable id="userDT" var="user" value="#{userController.showUserList()}"> 
    <p:column width="200" headerText="User Name"> 
     <h:outputText value="#{user.user_name}" /> 
    </p:column> 

    <p:column width="200" headerText="City Name"> 
     <h:outputText value="#{...}" /> 
    </p:column> 
</p:dataTable> 

回答

1

假設一個User有一個City,您可以在city屬性添加到User類:

public class User{ 
    ... 
    private City city; 

    public City getCity() { 
     return city; 
    } 

    public void setCity(City city) { 
     this.city = city; 
    } 
    ... 
} 

在你userDAO,在showUserList()方法的while循環結束時,把城市中的用戶對象:

... 
while (rs.next()) { 
    User user = new User(); 
    City city = new City(); 

    user.setUser_Id(rs.getInt("user_id")); 
    user.setUser_Id(rs.getString("user_name")); 

    city.setCity_Name(rs.getInt("city_name"));  

    user.setCity(city); 

    users.add(user); 
} 
... 

showUserList()方法中的城市列表未在方法外使用,您可以將其刪除。

最後,編輯這樣的觀點:

... 
<p:column width="200" headerText="City Name"> 
    <h:outputText value="#{user.city.city_name}" /> 
</p:column> 
... 
相關問題