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 + -
显示快捷键?