1. package test;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.PreparedStatement;
  6. import java.sql.SQLException;
  7. public class DBHelper {
  8. public static final String url = "jdbc:mysql://127.0.0.1/peixian";
  9. public static final String name = "com.mysql.jdbc.Driver";
  10. public static final String user = "root";
  11. public static final String password = "root";
  12.  
  13. public Connection conn = null;
  14. public PreparedStatement pst = null;
  15.  
  16. public DBHelper(String sql) {
  17. try {
  18. Class.forName(name);//指定连接类型
  19. conn = DriverManager.getConnection(url,user,password);//获取连接
  20. pst = conn.prepareStatement(sql);//准备执行语句
  21. } catch (Exception e) {
  22. e.printStackTrace();
  23. }
  24. }
  25.  
  26. public void close() {
  27. try {
  28. this.conn.close();
  29. this.pst.close();
  30. } catch (SQLException e) {
  31. e.printStackTrace();
  32. }
  33. }
  34.  
  35. }
  36. //调用demo类================
  37. package test;
  38. import java.sql.ResultSet;
  39. import java.sql.ResultSetMetaData;
  40. import java.sql.SQLException;
  41. import java.util.ArrayList;
  42. import java.util.HashMap;
  43. import java.util.List;
  44. import java.util.Map;
  45.  
  46. import com.mysql.jdbc.StringUtils;
  47. public class Demo {
  48. static String sql = null;
  49. static DBHelper db1 = null;
  50. static ResultSet ret = null;
  51.  
  52. public static void main(String[] args) {
  53. sql = "select *from xy_sys_menu";//SQL语句
  54. db1 = new DBHelper(sql);//创建DBHelper对象
  55.  
  56. try {
  57. List<Map<String,Object>>list=new ArrayList<Map<String,Object>>();
  58. ret = db1.pst.executeQuery();//执行语句,得到结果集
  59. ResultSetMetaData md = ret.getMetaData(); //获得结果集结构信息,元数据
  60. int columnCount = md.getColumnCount(); //获得列数
  61. while (ret.next()) {
  62. Map<String,Object> rowData = new HashMap<String,Object>();
  63. for (int i = 1; i <= columnCount; i++) {
  64. rowData.put(md.getColumnName(i), ret.getObject(i));
  65. }
  66. list.add(rowData);
  67.  
  68. }
  69. System.out.println("list============="+list);
  70. List<Map<String, Object>>listTree=getTreeList("MENU_NO","PMENU_NO","children",list);
  71. System.out.println("listTree===="+listTree);
  72. ret.close();
  73. db1.close();//关闭连接
  74. } catch (SQLException e) {
  75. e.printStackTrace();
  76. }
  77. }
  78.  
  79. //把带有父子机构的数据变成treelist形式
  80. public static List<Map<String, Object>> getTreeList(String id,String pid,String children,List<Map<String, Object>>list) {
  81. //List<Map<String, Object>>listmap=new ArrayList<Map<String, Object>>();
  82. //给list的每一项加一个子项
  83. for(int i=0;i<list.size();i++) {
  84. list.get(i).put(children, new ArrayList<Map<String, Object>>());
  85. }
  86. List<Map<String, Object>>treelist=new ArrayList<Map<String, Object>>();
  87. for(Map<String, Object> outmap:list) {
  88. for(Map<String, Object> inmap:list) {
  89. String outid=outmap.get(id).toString();
  90. String inpid=inmap.get(pid).toString();
  91. if(outid.equals(inpid)) {
  92. List<Map<String, Object>>maplist=(ArrayList) outmap.get(children);
  93. maplist.add(inmap);
  94. }
  95. }
  96. String prid=outmap.get(pid).toString();
  97. if(StringUtils.isNullOrEmpty(prid)) {
  98. treelist.add(outmap);
  99. }
  100. }
  101. return treelist;
  102. }
  103. }

将从数据库查询出来的带有父子结构的list转换成treeList结构的更多相关文章

  1. JS 将有父子关系的数组转换成树形结构数据

    将类似如下数据转换成树形的数据 [{ id: 1, name: '1', }, { id: 2, name: '1-1', parentId: 1 }, { id: 3, name: '1-1-1', ...

  2. 用java代码将从数据库中取出的具有父子关系的数据转成json格式

    思路:①.取出数据中的所有父节点放入一个集合中②.取出数据中所有为该父节点的子节点放入另一个集合中③.用到迭代的方法将子节点一层一层的遍历工具类:package com.assasion.test;i ...

  3. C# 把带有父子关系的数据转化为------树形结构的数据 ,以及 找出父子级关系的数据中里面的根数据Id

    紧接上一篇,将List<Menu>的扁平结构数据, 转换成树形结构的数据 返回给前端   ,   废话不多说,开撸! --------------------- 步骤: 1. 建 Menu ...

  4. laravel数据库查询返回的数据形式

    版本:laravel5.4+ 问题描述:laravel数据库查询返回的数据不是单纯的数组形式,而是数组与类似stdClass Object这种对象的结合体,即使在查询构造器中调用了toArray(), ...

  5. yii2.0数据库查询修改等方法

    yii2.0学习有一段时间了,给大家分享一下一些简单的查询等如何操作. 查询:(这里最前面的Test是引用的模型名) Test::find()->all();    此方法返回所有数据: Tes ...

  6. iBatis.Net(C#)数据库查询

    引用请注明http://www.cnblogs.com/13590/archive/2013/03/14/2958735.html  摘要:查询是数据库SQL语言的核心,本文介绍了通过iBatis.N ...

  7. 50种方法优化SQL Server数据库查询

    查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 ...

  8. 转载 50种方法优化SQL Server数据库查询

    原文地址 http://www.cnblogs.com/zhycyq/articles/2636748.html 50种方法优化SQL Server数据库查询 查询速度慢的原因很多,常见如下几种: 1 ...

  9. Python中的Django框架中prefetch_related()函数对数据库查询的优化

    实例的背景说明 假定一个个人信息系统,需要记录系统中各个人的故乡.居住地.以及到过的城市.数据库设计如下: Models.py 内容如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

随机推荐

  1. CentOS虚拟化尝试

    KVM ///确认cpu是否支持kvm,确认支持,主板还得开启VT和HT egrep '(vmx|svm)' --color=always /proc/cpuinfo ///yum安装rpm包 yum ...

  2. 02-Python里字符串的常用操作方法--split()函数和join()函数

    1.split() --分割,返回一个列表, 会丢失分割字符 实例: my_str = 'you and me and he' list01 = my_str.split('and') list02 ...

  3. 前端vue小知识点

    前端转后端Json数据 this.orderList=JSON.parse(resp.parameter)

  4. fist-第九天冲刺随笔

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...

  5. 小米ICPC第一场自闭记

    这次终于找到了靠谱队友,比之前我做不出来==队友做不出来好太多了 昨天3人热身赛疯狂杀了8道题,感觉今天稳了 一开始就瞅了A题,发现似乎可以dp,看了看数据,1e7,大概想出了nsqrtn算法,想着肯 ...

  6. 区块链学习1:Merkle树(默克尔树)和Merkle根

    ☞ ░ 前往老猿Python博文目录 ░ 一.简介 默克尔树(Merkle tree,MT)又翻译为梅克尔树,是一种哈希二叉树,树的根就是Merkle根. 关于Merkle树老猿推荐大家阅读<M ...

  7. PyQt(Python+Qt)学习随笔:QTreeView树形视图的rootIsDecorated属性

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.属性说明 QTreeView树形视图的rootIsDecorated属性用于控制是否展示对顶层项 ...

  8. PyQt(Python+Qt)学习随笔:部件的minimumSize、minimumSizeHint之间的区别与联系

    1.minimumSize是一个部件设置的最小值,minimumSizeHint是部件Qt建议的最小值: 2.minimumSizeHint是必须在布局中的部件才有效,如果是窗口,必须窗口设置了布局才 ...

  9. 一台电脑上同时安装python2和python3

    被python2的编码问题整的快晕了,python3对编码问题解决的不错 所以想安装下python3,但由于目前企业大多还是用python2,所以不想卸载2,让python2和python3共存. 本 ...

  10. 【CSP-S 2019】树的重心(重心的性质)

    Description 给定一颗 \(n\) 个顶点的树 \(\text T\),共 \(n-1\) 次断边操作,每次将树分为两部分 \(\text T_1, \text T_2\),求: \[\su ...