[英]One to Many ResultSet In Java
我的員工數據是:-
NAME | ID | DEP_CODE
AA 3679 SALES
AA 3679 HR
AA 3679 TECH
AA 3679 MARKETTING
BB 3604 HR
BB 3604 SALES
有人可以修改它並幫助我在這里消除FOR循環的需要,並一次性獲取員工列表嗎? 我只想進行一次數據庫調用,我想根據ID提取DEP_CODE。
public List<Employee> fetchDistinctEmployee() {
List<Employee> empList = new ArrayList<Employee>();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select distinct NAME, ID FROM Emp_Table");
while (rs.next()) {
Employee ep = new Employee();
em.setNAME(rs.getString("NAME"));
em.setID(rs.getInt("ID"));
empList.add(em);
}
for (Employee emp : empList) {
String sql1 = "SELECT DISTINCT DEP_CODE FROM Emp_Table WHERE id='" + emp.getID() + "'";
ResultSet rs1 = stmt.executeQuery(sql1);
ArrayList<String> list = new ArrayList<String>();
while (rs1.next()) {
list.add(rs1.getString("DEP_CODE"));
}
emp.setDEPCODE(list);
}
return empList;
}
我會使用地圖:
Map<Integer,Employee> empMap = new LinkedHashMap<>();
try (Statement stmt = conn.createStatement()) {
ResultSet rs = stmt.executeQuery("select distinct NAME, ID, DEP_CODE FROM Emp_Table");
while (rs.next()) {
int id = rs.getInt("ID");
Employee em = empMap.get(id);
if (em == null) {
em = new Employee();
em.setID(id);
em.setNAME(rs.getString("NAME"));
em.setDEPCODE(new ArrayList<>()); // could be done in the constructor of Employee instead
empMap.put(id, em);
}
em.addDEPCODE(rs.getString("DEP_CODE"));
}
}
return new ArrayList<>(empMap.values());
方法addSEPCODE
將一個值添加到SEPCODE
列表中。
注意,順便說一句,在完成語句后關閉語句是個好主意。
下面的代碼僅是一個建議,希望對您有所幫助。 請記住,這些代碼尚未經過測試。
public List<Employee> fetchDistinctEmployee() {
Map<String,Employee> empMap = new HashMap<String,Employee>();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select NAME, ID, DEP_CODE FROM Emp_Table");
while (rs.next()) {
String id = rs.getInt("ID");
Employee ep = empMap.get(id);
if(ep==null){
ep = new Employee();
empMap.put(id, ep);
ep.setID(id);
ep.setNAME(rs.getString("NAME"));
}
ep.getDEPCODE.add(rs.getString("DEP_CODE"));
}
return new ArrayList<Employee>(empMap.values());
}
只需修改OP的代碼並僅循環一次即可:
public List<Employee> fetchDistinctEmployee() {
List<Employee> empList = new ArrayList<Employee>();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select NAME, ID, DEP_CODE FROM Emp_Table sort by ID");
Employee em = null ;
while (rs.next()) {
if(em == null || em.getID() != rs.getInt("ID")) {
em = new Employee();
em.setDEPCODE(new ArrayList<String>());
empList.add(em);
}
em.setNAME(rs.getString("NAME"));
em.setID(rs.getInt("ID"));
em.getDEPCODE().add(rs.getString("DEP_CODE"));
}
return empList;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.