[英]One to Many ResultSet In Java
My employee data is:- 我的员工数据是:-
NAME | ID | DEP_CODE
AA 3679 SALES
AA 3679 HR
AA 3679 TECH
AA 3679 MARKETTING
BB 3604 HR
BB 3604 SALES
Can someone revise it and help me to remove the need of FOR loop here and fetch list of employee in one go? 有人可以修改它并帮助我在这里消除FOR循环的需要,并一次性获取员工列表吗? I want to make DB call only once, I want to fetch DEP_CODE based on ID. 我只想进行一次数据库调用,我想根据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;
}
I would use a Map: 我会使用地图:
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());
Method addSEPCODE
would add one value to the SEPCODE
list. 方法addSEPCODE
将一个值添加到SEPCODE
列表中。
Note BTW that it's a good idea to close a statement when finished with it. 注意,顺便说一句,在完成语句后关闭语句是个好主意。
The code below is only a piece of advice, I hope it is helpful. 下面的代码仅是一个建议,希望对您有所帮助。 Remember these code haven't been tested. 请记住,这些代码尚未经过测试。
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());
}
Just modifying OP's code and looping only once: 只需修改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.