sample30_10.java

来自「Java SE 6.0前27-31章示的示例代码,简单易学」· Java 代码 · 共 608 行 · 第 1/2 页

JAVA
608
字号
	{
		//获取数据库连接
		Connection con=this.getConnection();
		try
		{
			//得到数据库的元数据
			DatabaseMetaData dbmd=con.getMetaData();
			//获取数据库产品名称信息
			String str=dbmd.getDatabaseProductName()+"数据库";
			//创建节点值对象并初始化其中的节点层与名称信息
			TreeNodeValue tnv=new TreeNodeValue(0,str);
			//将值对象设置给根节点
			dmtnroot.setUserObject(tnv);
			//更新树的数据模型
			((DefaultTreeModel)jtr.getModel()).reload(dmtnroot);
		}
		catch(SQLException se)
		{//弹出数据库操作不成功对话框
			JOptionPane.showMessageDialog(this,
				"数据库操作不成功!!!","错误",JOptionPane.WARNING_MESSAGE);
		}
		catch(Exception e)
		{//弹出位置错误不成功对话框
			JOptionPane.showMessageDialog(this,
				"未知错误!!!","错误",JOptionPane.WARNING_MESSAGE);
		}
		finally
		{
			try
			{//关闭连接
				con.close();	
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}	
	//获取表信息并初始化表节点的方法
	public void initTreeTable()
	{
		//获取数据库连接
		Connection con=this.getConnection();
		try
		{
			//获取数据库的元数据
			DatabaseMetaData dbmd=con.getMetaData();
			//获取数据库中关于表信息的结果集
			ResultSet rs=dbmd.getTables(null,null,null,new String[]{"TABLE"});
			while(rs.next())
			{
				//使用表名创建树节点的值对象
				TreeNodeValue temp=new TreeNodeValue(1,rs.getString(3));
				//将包含值对象的节点添加进树根节点中
				dmtnroot.add(new DefaultMutableTreeNode(temp));
			}
			//关闭结果集
			rs.close();
			//更新树的数据模型
			((DefaultTreeModel)jtr.getModel()).reload(dmtnroot);
		}
		catch(SQLException se)
		{//弹出数据库操作不成功对话框
			JOptionPane.showMessageDialog(this,
				"数据库操作不成功!!!","错误",JOptionPane.WARNING_MESSAGE);
		}
		catch(Exception e)
		{//弹出位置错误不成功对话框
			JOptionPane.showMessageDialog(this,
				"未知错误!!!","错误",JOptionPane.WARNING_MESSAGE);
		}
		finally
		{
			try
			{
				//关闭连接
				con.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
	//获取指定表列信息并初始化列节点的方法
	public void initTreeColumn(String tablename,DefaultMutableTreeNode dmtn)
	{
		//获取连接
		Connection con=this.getConnection();
		try
		{
			//获取数据库的元数据
			DatabaseMetaData dbmd=con.getMetaData();
			//从元数据中获取关于指定表的列信息
			ResultSet rs=dbmd.getColumns(null,null,tablename,null);
			while(rs.next())
			{
				//使用获取的列名初始化列节点的值对象
				TreeNodeValue temp=new TreeNodeValue(2,rs.getString(4));
				//将包含值对象的列节点添加到指定的表节点中
				dmtn.add(new DefaultMutableTreeNode(temp));
			}
			//更新树的数据模型
			((DefaultTreeModel)jtr.getModel()).reload(dmtn);
			//设置维持当前的选择路径
			jtr.setExpandsSelectedPaths(true);
		}
		catch(SQLException se)
		{//弹出数据库操作不成功对话框
			JOptionPane.showMessageDialog(this,
				"数据库操作不成功!!!","错误",JOptionPane.WARNING_MESSAGE);
		}
		catch(Exception e)
		{//弹出位置错误不成功对话框
			JOptionPane.showMessageDialog(this,
				"未知错误!!!","错误",JOptionPane.WARNING_MESSAGE);
		}
		finally
		{
			try
			{
				//关闭连接	
				con.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}	
	//实现TreeSelectionListener接口中的事件处理方法
	public void valueChanged(TreeSelectionEvent tse)
	{
		//获取当前选中接点的路径
		TreePath tp=tse.getNewLeadSelectionPath();
		//测试节点路径是否为null 
		if(tp!=null)
		{
			//获取选中的节点对象
			DefaultMutableTreeNode dmtntemp=
					(DefaultMutableTreeNode)tp.getLastPathComponent();
			//获取选中节点的值对象
			TreeNodeValue tnvtemp=(TreeNodeValue)dmtntemp.getUserObject();
			//测试该节点是否位于表示表的层
			if(tnvtemp.getFloor()==1)
			{
				//测试该表节点下的列节点是否已经被初始化
				if(!tnvtemp.isOpen())
				{
					//设置值对象中的open属性
					tnvtemp.setOpen(true);
					//初始化列节点
					this.initTreeColumn(tnvtemp.toString(),dmtntemp);
				}
				//调用显示表数据的方法
				this.changeTable(tnvtemp.toString());				
			}
			//测试该节点是否位于表示列的层
			if(tnvtemp.getFloor()==2)
			{
				//获取该节点当前选种节点的父节点
				DefaultMutableTreeNode father=
							(DefaultMutableTreeNode)dmtntemp.getParent();
				//从父节点中获取值对象
				TreeNodeValue tnvfather=(TreeNodeValue)father.getUserObject();
				//调用显示列数据的方法
				this.changeColumn(tnvfather.toString(),tnvtemp.toString());
			}			
		}
	}	
	//显示选中表内容的方法
	public void changeTable(String tname)
	{
		//获取连接
		Connection con=this.getConnection();
		try
		{
			//获取Statement对象
			Statement stat=con.createStatement();
			//获取查询后的结果集
			ResultSet rs=stat.executeQuery("select * from "+tname);
			//获取结果集的元数据
			ResultSetMetaData rsmd = rs.getMetaData();
			//获取结果集元数据的长度
			int colcount=rsmd.getColumnCount();
			//创建一个用来存放表头的向量
			Vector coln=new Vector();
			for(int i=1;i<=colcount;i++)
			{//将每个字段的名称添加进向量
				coln.add(rsmd.getColumnName(i));
			}
			//创建一个用来存放数据的向量
			Vector data=new Vector();
			while(rs.next())
			{
				//为每条记录创建一个向量
				Vector rowv=new Vector();
				for(int i=1;i<=colcount;i++)
				{//将该行记录的各个字段值添加进行向量中
					rowv.add(rs.getString(i));
				}
				//将行向量添加进数据向量中
				data.add(rowv);
			}
			//创建包含数据与表头的表模型
			DefaultTableModel dtm=new DefaultTableModel(data,coln);
			//为模型创建排序器
			TableRowSorter sorter = new TableRowSorter(dtm);
			//将排序器设置到表格上
			jta.setRowSorter(sorter);
			//将包含数据与表头的表模型设置到JTable中
			jta.setModel(dtm);
		}
		catch(SQLException se)
		{//弹出数据库操作不成功对话框
			JOptionPane.showMessageDialog(this,
				"数据库操作不成功","错误",JOptionPane.WARNING_MESSAGE);
		}
		catch(Exception e)
		{//弹出位置错误不成功对话框
			JOptionPane.showMessageDialog(this,
				"未知错误","错误",JOptionPane.WARNING_MESSAGE);
		}
		finally
		{
			try
			{
				//关闭连接
				con.close();	
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}	
	//显示选中列信息的方法
	public void changeColumn(String tname,String cname)
	{
		//获取连接
		Connection con=this.getConnection();
		try
		{
			//获取数据库的元数据
			DatabaseMetaData dbmd=con.getMetaData();
			//获取包含指定表中指定列信息的结果集
			ResultSet rs=dbmd.getColumns(null,null,tname,cname);
			//创建表示JTable表头的字符串数组
			String[] vcol={"所在表","列名","字段类型","列大小","列的索引","允许NULL"};
			//创建表示JTable数据的字符串数组
			String[][] vdata=new String[1][6];
			while(rs.next())
			{
				//获取所在表信息
				vdata[0][0]=rs.getString(3);
				//获取列名信息
				vdata[0][1]=rs.getString(4);
				//获取字段类型信息
				vdata[0][2]=rs.getString(6);
				//获取列大小信息
				vdata[0][3]=rs.getString(7);
				//获取索引信息
				vdata[0][4]=rs.getString(17);
				//获取是否允许NULL的信息
				vdata[0][5]=rs.getString(18);
			}
			//创建包含数据与表头的表模型
			DefaultTableModel dtm=new DefaultTableModel(vdata,vcol);
			//为模型创建排序器
			TableRowSorter sorter = new TableRowSorter(dtm);
			//将排序器设置到表格上
			jta.setRowSorter(sorter);
			//将包含数据与表头的表模型设置到JTable中
			jta.setModel(dtm);
		}
		catch(SQLException se)
		{//弹出数据库操作不成功对话框
			JOptionPane.showMessageDialog(this,
				"数据库操作不成功!!!","错误",JOptionPane.WARNING_MESSAGE);
		}
		catch(Exception e)
		{//弹出位置错误不成功对话框
				JOptionPane.showMessageDialog(this,
					"未知错误!!!","错误",JOptionPane.WARNING_MESSAGE);
		}
		finally
		{
			try
			{
				//关闭连接
				con.close();	
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args)
	{
		new Sample30_10();
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?