JTree连接数据库,树状显示层级关系,SQL Server

最近需要写一个java界面,其中这个里面包含了一个树状的层级界面,在网上查找了好多了资料,但是限于自身能力,最终还是找到了解决办法,如果对你有帮助那是再好不过了

数据库是SQL Server 2008R2
程序连接数据库前,需要导入包,mssql-jdbc-7.0.0.jre10.jar

其它的,基本上就是在程序里面定义了

package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;

public class TT2_backup extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static Connection con;
	private static Statement stmt = null;
	DefaultMutableTreeNode Top = new DefaultMutableTreeNode("root");

	ResultSet rs;

	// 连接数据库,这个地方是静态加载,如果日后想换,可以更改
	static {

		String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
		String connection = "jdbc:sqlserver://localhost:1433;DatabaseName=test";
		// 数据库用户名
		String user = "sa";
		// 数据库密码
		String password = "123";

		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

		try {
			con = DriverManager.getConnection(connection, user, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}

		try {
			stmt = con.createStatement();
		} catch (SQLException e) {

			e.printStackTrace();
		}
	}

	TT2_backup() throws SQLException {
		
		DefaultMutableTreeNode Top = new DefaultMutableTreeNode("root");
		ArrayList<Integer> list = BFS(Top, 0);
		JTree tree = new JTree(Top);
		add(tree);
		System.out.print(list);
		setLocation(100, 100);
		setSize(300, 400);
		setVisible(true);
	}

	/**
	 * 使用广度优先搜索遍历的方式,从数据库里面挑选数据,建立sql语句
	 * 原先使用DFS,只有单层的,一旦出现多层,其返回就会出现找不到数据的情况
	 * 也不知道怎么搞
	 * @param top
	 * @param index
	 * @return
	 * @throws SQLException
	 */
	public static ArrayList<Integer> BFS(DefaultMutableTreeNode top, int index) throws SQLException {
		//queue存放id数列的队列
		Queue<Integer> queue = new LinkedList<Integer>();
		
		//存放节点
		Queue<DefaultMutableTreeNode> queue2 = new LinkedList<DefaultMutableTreeNode>();
		
		//list是为了测试,节点id的是那些
		ArrayList<Integer> list = new ArrayList<Integer>();
		
		if (top == null) {
			return list;
		}
		
		list.add(index);	//0
		queue.add(index);	//0
		queue2.add(top);	//root节点
		String strsql = null;

		while (!queue.isEmpty() && !queue2.isEmpty()) {
			int id = queue.poll();
			//弹出队列中的第一个节点,此即为父节点
			DefaultMutableTreeNode node_parent = queue2.poll();
			//创建sql语句
			strsql = "select ID,NAME,ParentID from t_owner where ParentID ='" + id + "'";
			Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
			con.prepareStatement(strsql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
			ResultSet rs = stmt.executeQuery(strsql);
			while (rs.next()) {
				int id2 = Integer.parseInt(rs.getString("ID"));
				list.add(id2);
				queue.add(id2);
				DefaultMutableTreeNode node2 = new DefaultMutableTreeNode(rs.getString("Name"));
				queue2.add(node2);
				node_parent.add(node2);
			}
		}
		
		return list;
	}

	// 主函数
	public static void main(String[] argv) throws Exception {
		new TT2_backup();
	}

	public void createNodes(DefaultMutableTreeNode parent, int ParentID) throws SQLException {

		DefaultMutableTreeNode temp = null;
		String strsql = "select ID,NAME,ParentID from t_owner where ParentID ='" + ParentID + "'";

		// 光标的相对位置
		int i = 0;
		try {
			// 创建的结果集,实现任意的前后滚动,对修改敏感, 设置为只读

			Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
			con.prepareStatement(strsql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

			rs = stmt.executeQuery(strsql);
			// 想要获取其结果集有几条

			// System.out.println(rs.getMetaData().getColumnCount());

			while (rs.next()) {
				i++;
				// System.out.println(i);
				temp = new DefaultMutableTreeNode(rs.getString("Name"));
				// System.out.println(temp);
				parent.add(temp);
				System.out.println(rs.getString("Name") + " " + rs.getString("ID"));
				// 创建一个新的节点,递归
				createNodes(temp, Integer.parseInt(rs.getString("ID")));
				rs.relative(i);
				rs = stmt.executeQuery(strsql);
				rs.next();

				
			}
		} catch (Exception e) {
			System.out.println(e);
		}
	}

	public void querysql(ResultSet rs, int i, DefaultMutableTreeNode parent, DefaultMutableTreeNode temp, String strsql)
			throws SQLException {
		// DefaultMutableTreeNode temp1 = null;
		rs.next();
		while (rs.next()) {
			i++;
			temp = new DefaultMutableTreeNode(rs.getString("Name"));
			parent.add(temp);

			// 创建一个新的节点,递归
			// createNodes(temp, rs.getString("ID"));
			rs = stmt.executeQuery(strsql);
			rs.next();
		}
	}

}

代码重要的地方写了注释,基本上也没有什么特殊的地方,欢迎讨论
程序运行截图
下面是数据库的截图
数据库截图

数据库设计
数据库

猜你喜欢

转载自blog.csdn.net/king__12/article/details/88305882
今日推荐