数据树形结构处理

public class TelLoginService extends ETellerBaseService implements ITelLoginService {
	/**
	 * 查询登录信息
	 */
	static String line = "├"; //保存首个制表符
	static int flag = 0;
	static Map<String,Integer> map = new HashMap<String,Integer>();
	@Test
	public void a() throws Exception{
		ResultSet rs = null;
		Connection conn = null;
		Statement smt=null;
		List<ExtBraninfo> list = new ArrayList<ExtBraninfo>();
		conn=getConnection(); // 获取数据库连接
		try {
			smt=conn.createStatement();
			//查询全部
			rs=smt.executeQuery("SELECT T1.BRAN_CODE, T1.BRAN_NAME, T1.PARENT_BRAN "+
			"FROM BRT_BRANDEF T1 START WITH T1.BRAN_CODE='2990999'" +
			"CONNECT BY PRIOR T1.BRAN_CODE = T1.PARENT_BRAN");
			while (rs.next()){
				ExtBraninfo bran = new ExtBraninfo();
				bran.setBranCode(rs.getString("bran_Code"));
				bran.setBranName(rs.getString("bran_Name"));
				bran.setParentBran(rs.getString("parent_Bran"));
				list.add(bran);
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (rs != null) {
				rs.close();
			}
			if (smt != null) {
				smt.close();
			}
			if (conn!= null) {
				conn.close();
			}
		}
		
		
		String root = "";  //用于保存节点
		root = list.get(0).getBranCode(); //赋值:根节点
		map.put(root, 0); //上方定义了全局的 map,用于存放 机构号,及前方横岗数量
		makeTree(list,root); //调用方法,处理数据
		//输出
		for(ExtBraninfo temp : list){
			System.out.println(temp.getBranCode());
		}
		
	}
	
	//处理数据
	public static void makeTree(List<ExtBraninfo> list,String root){
		//为树添加横线 (按组添加)
		for(ExtBraninfo temp:list){
			if(root.equals(temp.getParentBran())){
				root = temp.getBranCode(); //保存当前根节点,用于添加至map
				temp.setBranCode(line+temp.getBranCode()); //为机构添加横线
				flag ++; //全局变量,用于存放处理到第n条数据
				map.put(root, line.length()); //添加,机构与横线数量对应关系
				line = line + "─";
			}
		}
		//第n组数据
		if(list.get(flag) != null && flag < list.size()-1){
			flag ++;
			ExtBraninfo ebNext = list.get(flag);
			Integer length = map.get(ebNext.getParentBran());
			line = "├"; //保存首个制表符
			for(int i=0; i<length; i++){
				line += "─";
			}
			map.put(ebNext.getBranCode(), line.length()); 
			String root1 = list.get(flag).getBranCode();
			list.get(flag).setBranCode(line+ebNext.getBranCode());//为第n组数据首个添加符号
			line += "─";
			makeTree(list,root1); //递归 :为第n组数据添加横线
		}
		
	}
	
	public static Connection getConnection() { 
		Connection conn = null;  
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e1) {
			e1.printStackTrace();
		}  
		try {
			conn = DriverManager.getConnection("###", "##", "##");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		return conn;
	}
}

 

转载于:https://my.oschina.net/fjr/blog/735746

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值