/*
* 创建日期 2005-4-14
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java- 代码样式 - 代码模板 */
package treeMenu;
import java.util.*;
import java.sql.*;
import dbmanager.DBConnection;
/**
* @author 呆猴 lucky
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class Tree {
private DBConnection conn;
public ArrayList arrayid;//定义包含所有id的数组
public ArrayList arrayname;//定义包含所有名称的数组
public ArrayList arrayparent;//定义包含所有父id的数组
public ArrayList class1_id;//定义包含所有一级信息id的数组
public Tree(){
try{
conn=new DBConnection();
}
catch(Exception e){
System.out.println("sorry");
}
}
/**
*
* 定义读取所有相关记录和一级信息的方法
*/
public void buidTreeinit() throws SQLException{
ResultSet rs=conn.runRs("select * from sp_sys_menu_item");
String aa="";
String id="";
String name="";
String parent_id="";
int i=0;
arrayid=new ArrayList();
arrayname=new ArrayList();
arrayparent=new ArrayList();
class1_id=new ArrayList();
while(rs.next()){
id=rs.getString("id");
name=rs.getString("name");
parent_id=rs.getString("parent_id");
arrayid.add(id);//把所有id信息赋值到arrayid数组中
arrayname.add(name);//把所有name信息赋值到arrayname数组中
arrayparent.add(parent_id);//把所有parent_id信息赋值到arrayparent数组中
/**
* 把所有的一级信息赋值到数组class1_id中
*/
if(parent_id.equals("0"))
{
class1_id.add(id);
}
}
conn.free();
}
/**
* 开始定义树型结构的构造
* @param parentid
* @throws SQLException
*/
public void buildTree(JspWriter out,String parentid,int j) throws Exception{
j++;
ArrayList tmplist=new ArrayList();//包含所有父id为parent_id的记录的名称数组
String mmm=" ";
String nnn="|";
for(int q=0;q<j;q++){
nnn=nnn+"--";
mmm=mmm+" ";
}
String table2="";
table2=table2+"<tr bgcolor=\"#FFFFFF\">";
table2=table2+"<td width=\"70%\" height=\"30\">"+mmm+nnn+" <name></td>";
table2=table2+"<td width=\"30%\" height=\"30\" align=\"center\">";
table2=table2+"修改 ";
table2=table2+"注册下级菜单 ";
table2=table2+" <del>";
table2=table2+"</td>";
table2=table2+"</tr>";
while(arrayparent.indexOf(parentid)!=-1)
{
String tmpname=(String)arrayname.get(arrayparent.indexOf(parentid));//获取所有父id为parent_id的记录的名称
String tmpid=(String)arrayid.get(arrayparent.indexOf(parentid));//获取该子信息的id,用于赋予下级子信息的父id
if(has_child(tmpid)){
out.print(table2.replaceAll("<name>",tmpname).replaceAll("<del>",""));
}
else{
out.print(table2.replaceAll("<name>",tmpname).replaceAll("<del>","删除"));
}
int tmp=arrayparent.indexOf(parentid);//获取参数parent_id所在位置
arrayparent.remove(tmp);//删除参数parent_id所在位置的parent_id
arrayid.remove(tmp);//删除参数parent_id所在位置的id
arrayname.remove(tmp);//删除参数parent_id所在位置name
if(has_child(tmpid))//如果该条信息有相关子信息重新执行buildTree方法
{
buildTree(out,tmpid,j);
}
}
}
/**
* 进行是否有子信息判断
* @param parentid
* @return
*/
public boolean has_child(String parentid)
{
boolean bb=false;
if(arrayparent.indexOf(parentid)!=-1)
{
bb=true;
}
return bb;
}
/**
* 树型结构显示
* @param args
* @throws Exception
*/
public void showTree(JspWriter out) throws Exception{
Tree aa=new Tree();
aa.buidTreeinit();
String table1="";
table1=table1+"<tr bgcolor=\"#CCCCCC\">";
table1=table1+"<td width=\"70%\" height=\"30\"> <name></td>";
table1=table1+"<td width=\"30%\" height=\"30\" align='center'>";
table1=table1+"修改 ";
table1=table1+"注册下级菜单 ";
table1=table1+" <del>";
table1=table1+"</td>";
table1=table1+"</tr>";
for(int i=0;i<aa.class1_id.size();i++)
{
if(aa.has_child((String)aa.class1_id.get(i))){
out.print(table1.replaceAll("<name>",(String)aa.arrayname.get(i)).replaceAll("<del>",""));
}
else{
out.print(table1.replaceAll("<name>",(String)aa.arrayname.get(i)).replaceAll("<del>","删除"));
}
aa.buildTree(out,(String)aa.class1_id.get(i),0);
}
}
}
/*
* 创建日期 2005-4-14
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package dbmanager;
import java.sql.*;
/**
* @author Administrator
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class DBConnection {
String user="sa";
String password="sa";
String sDBDriver="com.microsoft.JDBC.sqlserver.SQLServerDriver"; String sConnStr="jdbc:microsoft:sqlserver://172.16.204.10:1433;DatabaseName=HLSP_MIS";
Connection connect=null;
ResultSet rs=null;
Statement stmt = null, stmt1 = null;
public DBConnection(){
try{
Class.forName(sDBDriver);
connect = DriverManager.getConnection(sConnStr,user,password);
stmt = connect.createStatement();
stmt1=connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
}
catch(Exception e){
System.err.println(e.getMessage());
}
}
//执行数据库查询
public ResultSet runRs(String sql){
rs=null;
try{
rs=stmt1.executeQuery(sql);
}
catch(SQLException ex){
System.err.println(ex.getMessage());
}
return rs;
}
//执行数据库其他操作
public boolean executeSql(String sql)
{
boolean che=false;
try
{
stmt.executeUpdate(sql);
che=true;
}
catch (SQLException ex)
{
System.err.println(ex.getMessage());
che=false;
}
return che;
}
//进行数据库连接释放
public boolean free(){
try {
connect.close();
if (stmt!=null){
stmt.close();
}
if(stmt1!=null){
stmt1.close();
}
return true;
}
catch (Exception e) {
return false;
}
}
}
分享到:
相关推荐
本示例中的“C# 递归生成树型菜单”着重讲解如何使用递归方法来动态构建一个`TreeView`控件,结合数据库数据,创建可运行的树形菜单。下面我们将详细探讨这个主题。 1. **递归的理解与应用**: 递归是编程中的一个...
在本示例中,我们将探讨如何使用ASP.NET递归生成树导航,这在构建具有层级结构的数据展示,如网站菜单、组织结构或文件系统目录时非常有用。 首先,递归是一种算法设计技术,它通过调用自身来解决问题。在生成树...
接下来,我们将讨论如何实现一个函数,它能接受一个扁平化的数组(所有节点平铺在一起),并根据给定的“父ID”和“ID”键生成树结构。假设我们的数组如下: ```php $flatArray = [ ['id' => 1, 'parentId' => 0, ...
在给定的场景中,`tree.php` 文件很可能是实现递归生成树结构的PHP代码。这个文件可能包含一个函数,该函数接受一个数组(通常是数据库查询结果),然后通过递归地遍历这个数组来构建一个多级的树。每个数组元素代表...
本文将深入探讨如何使用EasyUI递归生成菜单树,并结合前后台代码来实现这一功能。 首先,让我们了解菜单树的基本概念。菜单树是一种以树形结构展示数据的控件,通常用于表示层次关系的数据,如网站导航、文件系统或...
JavaScript递归算法生成树形菜单是一种常见的编程技巧,主要用于处理具有层级关系的数据,例如网站的导航菜单、组织结构等。在本示例中,我们看到如何利用递归方法将一个对象数组转换为HTML的树形结构,从而在网页上...
在这个"ASP.NET-Treeview-递归生成部门树"的示例中,我们将探讨如何利用TreeView控件结合递归算法来构建一个表示部门结构的树形视图。 首先,我们要理解TreeView的基本概念。TreeView控件是一个可视化组件,它能够...
根据提供的文件信息,我们可以深入分析并提取出与“使用JavaScript生成树形结构代码,并实现动态生成”的相关知识点。下面将详细介绍这些知识点。 ### 一、理解树形结构 #### 1.1 定义 在计算机科学中,树是一种非...
在这个例子中,`buildTree`方法接收一个菜单列表和根菜单ID,找到所有父ID等于根ID的菜单,并为它们生成子菜单。这个过程会一直进行,直到所有菜单项都被处理。 在SpringBoot应用中,我们可以创建一个服务类,将...
在ASP.NET中实现递归生成树,通常涉及到以下关键概念和技术: 1. 数据模型:首先,你需要一个数据模型来存储层级数据。这个模型通常包含一个ID字段(标识当前节点)、一个父ID字段(指向父节点)以及其他相关信息。...
在JavaScript(JS)中生成树形结构,通常用于创建如导航菜单、文件系统视图或者组织数据。在给定的标题和描述中提到了两种方法:一是使用现成的插件,二是采用自定义的JS代码。这两种方法各有优缺点,下面我们将详细...
最后,我们对每个子节点调用`CreateTree`方法,传递子节点的ID作为新的父ID,以便递归地处理其子节点。 为了使用这个方法,我们需要从数据库中查询所有的`Nodes`,并调用`CreateTree`方法,传入根节点的ID(通常是...
递归是一种解决问题的方法,通过将问题分解为更小的相同子问题来解决。以下是对递归实现树形菜单的详细解释: 1. **树形结构理解**:树形结构是数据结构的一种,由节点(或称为顶点)和边组成。每个节点可以有零个...
总结来说,构建.NET递归树的关键在于理解递归的概念,以及如何在后台生成树形数据结构,并将其转换为前端可以处理的格式。同时,前端使用合适的jQuery控件,如`jstree`,将数据转化为用户友好的可视化界面。通过这种...
本文将介绍一种使用递归算法在JSP中生成目录树的方法,结合数据库技术,使得动态生成目录树变得可行。 1. 基本思路: 生成目录树的关键在于理解目录结构的层次关系,这通常可以通过递归算法来实现。递归是一种解决...
递归构建树形结构数据是指使用递归方法生成树状的数据结构,常见于实现具有层级关系的菜单系统,例如无限层级菜单。递归方法通过函数自己调用自己的方式简化问题,使其在面对复杂层级结构时,能够逐层创建和构建出...
例如,可以创建一个数据模型,该模型包含一个递归方法来生成树的节点,然后将这些节点添加到TreeView控件中。 在实际应用中,为了优化性能,通常会使用分页或懒加载技术,避免一次性加载大量数据。当用户展开树的一...
TreeView 控件可以用来显示树形结构的数据,它可以根据需要动态生成树形结构的节点。为了实现这个功能,我们可以使用递归函数来加载树形结构的节点。在上面的代码中,我们可以看到使用了 LoadNode 函数来加载树形...
最终,我们从这个递归生成的树中选择所有的记录。 在获取了数据库中的层级数据后,我们需要在前端进行处理,构建树形下拉列表。这通常涉及到JavaScript或其库,如jQuery、React、Vue等。以下是一个基本的JavaScript...
一种常见的方式是使用“自引用”字段,即一个分类可以有多个子分类,这些子分类的ID作为父分类的外键。这样,每个分类都可以有任意数量的子分类,形成无限级深度。 3. **父级与子级**: 在无限级分类中,每个节点...