import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Stack;
import connect.JdbcUtil;
public class test
{
public static void main(String[] args)
{
Connection conn = JdbcUtil.gerConnection();
Statement sm = null;
ResultSet rt = null;
try
{
sm = conn.createStatement();
String sql = "select pid ,id from employees start with id =2 connect by prior id=pid";
rt = sm.executeQuery(sql);
int ii=1;
int id =0;
Stack<Integer> stack=new Stack<Integer>();
stack.push(id);
while (rt.next())
{
//依赖oracle数据库的connect by 树结构技术 查询出来的数据本身就存在递归结构
//有两种情况
//1、如果新节点的pid与栈中最后一个相等说明新节点为上一个的原素的子节点输出位置前进一位
//2、如果新节点的pid与栈中最后一个不相等则说明新节点不是上一个原色的 子节点 位置后退
// 继续判断是否为栈中节点的子节点 同理 不是继续回撤,是继续前进。
if(rt.getInt("pid")== stack.lastElement())
{
//有新子节点增加子节点记录
ii = ii +1;//输出长度空格加1
}
while(rt.getInt("pid")!= stack.lastElement())
{
stack.pop();//没有子节点删除子节点记录
if(rt.getInt("pid")!= stack.lastElement())
{
ii = ii -1;
}
}
tt(ii);
System.out.print(rt.getInt("pid"));
dd(1);
System.out.println(rt.getInt("id"));
id = rt.getInt("id");
stack.push(id);
}
} catch (SQLException e)
{
e.printStackTrace();
}
finally
{
JdbcUtil.closeResultSet(rt);
JdbcUtil.closeStatement(sm);
}
}
public static void dd(int n)
{
for(int i=1;i<=n ;i++)
{
System.out.print("..");
}
}
public static void tt(int n)
{
for(int i=1;i<=n ;i++)
{
System.out.print(" ");
}
}
}
打印结果
0..2
2..1 2..3 3..6 6..12 3..8 8..14 3..9 2..4 4..7 7..15 2..5 5..11 5..13 2..10