繁体   English   中英

如何从 java 中的数据库中获取数据分层数据

[英]how to fetch data hierarchal data from database in java

在此处输入图像描述 数据库中有员工表,如图所示,使用 jdbc 和 java 从表中获取数据。 预期结果也在图像中。

在此处输入图像描述 图像中需要 output

您可以创建一个员工 class,其中包含如下报告列表以及 empId 和 reportingId:


public class Employee {
    private String empId;
    private String reportingId;
    private List<Employee> reports;

    public Employee(String empId, String reportingId) {
        this.empId = empId;
        this.reportingId = reportingId;
        this.reports = new ArrayList<>();
    }

    public String getEmpId() {
        return empId;
    }

    public String getReportingId() {
        return reportingId;
    }

    public List<Employee> getReports() {
        return reports;
    }
}

// Step 1: Connect to the database
Connection conn = DriverManager.getConnection(connectionString, username, password);

// Step 2: Execute a SELECT statement
Statement stmt = conn.createStatement();
 ResultSet rs = stmt.executeQuery("SELECT empId, reportingId FROM employee");

// Step 3: Iterate over the resultset and create a Map of Employee objects
Map<String, Employee> employees = new HashMap<>();
while (rs.next()) {
    String empId = rs.getString("empId");
    String reportingId = rs.getString("reportingId");
    Employee employee = new Employee(empId, reportingId);
    employees.put(empId, employee);
}

// Step 4: Iterate over the Map and create the hierarchy of Employee objects
for (Employee employee : employees.values()) {
    Employee manager = employees.get(employee.getReportingId());
    if (manager != null) {
        manager.getReports().add(employee);
    }
}

// The hierarchy of Employee objects is now complete

然后,您可以使用递归方法打印 Employee 对象的层次结构,如下所示:


public void printHierarchy(Employee employee, int level) {
    for (int i = 0; i < level; i++) {
        System.out.print("\t");
    }
    System.out.println(employee.getEmpId());
    for (Employee report : employee.getReports()) {
        printHierarchy(report, level + 1);
    }
}

从 101 员工调用 printHierarchy 方法

Output:

            101
                1013
                1012
                    101222
                    101223
                1011
                    101101
                    101102

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM