用java递归的方式,递归查询数据库,把查询结果是主节点的去掉,并把剩下节点名称保存在集合返回

表结构为:

| id |  name   | parent_id |
|  1 |  A      |          0|
|  2 |  A_1    |          1|
|  3 |  A_1_1  |          2|
|  4 |  A_1_1_1|          3|
|  5 |  B      |          0|
|  6 |  B_1    |          5|
|  7 |  C      |          0|

依赖

	  
        mysql
        mysql-connector-java
        5.1.26
    

代码如下

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public List querySubtree(int parentId, Connection conn) throws SQLException {

PreparedStatement stmt = conn.prepareStatement("SELECT * FROM tree WHERE parent_id = ?");
stmt.setInt(1, parentId);
ResultSet rs = stmt.executeQuery();
List resultList = new ArrayList<>();
while (rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString("name");
    if (!name.equalsIgnoreCase("A")) {  // 如果节点名不是 "A",则将节点名添加到结果列表中
        resultList.add(name);
    }
   List children = querySubtree(id, conn);
    resultList.addAll(children);  // 将子节点的名称合并到结果列表中
}
rs.close();
stmt.close();
return resultList;
}

主程序调用

String url = "jdbc:mysql://localhost:3306/test?useSSL=false";
String user = "root";
String password = "password";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
List result = querySubtree(0, conn);    // 查询根节点的子孙节点名称
System.out.println(result);
} catch (SQLException e) {
e.printStackTrace();
}

你可能感兴趣的:(java,开发语言)