oracle树结构查询结果 树结构打印显示

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值