JDBC数据库编程-总案例【数据的界面模拟】

32 篇文章 0 订阅
20 篇文章 0 订阅

知识点:JList和JTable的正确使用应该是插入在滚动窗体中

package com.bn;
import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.table.*;
import javax.swing.event.*;

public class DBManager extends JFrame//窗体
 implements ListSelectionListener//实现列表选择监听接口
{
 Vector v,vdata=new Vector(),
 vcolumn=new Vector();//每个列的信息
 JList jl;
 JScrollPane zs,ys;//分成左右两个部分
 JSplitPane js;//负责把窗体左右分开
 JTable jt;//右侧显示数据的位置
 DefaultTableModel df;//默认的表格模型,负责向JTable表格控件提供数据 
 Connection con;//数据库连接
 
 public DBManager()
 {
  super("数据库管理");
  
  Container c=this.getContentPane();//窗体容器
  c.setLayout(new GridLayout(1,1));//1*1的网格布局
  
  this.getConnection();//获取数据连接
  jl=new JList(v);//列表
  zs=new JScrollPane(jl);//
  
  df=new DefaultTableModel(vdata,vcolumn);//参数(数据,当前列的信息)
  jt=new JTable(df);
  ys=new JScrollPane(jt);
  
  js=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,zs,ys);//窗体分割(表示水平分割,左侧滚动窗体,右侧..)
  c.add(js);//把js添加到窗体的1*1网格中
  
  js.setDividerLocation(150);//分割条的位置
  js.setDividerSize(4);//分割条的宽度
  
  this.setBounds(100,100,600,400);
  this.setVisible(true);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
  jl.addListSelectionListener(this);//添加改变列表选择监听
 }
 
 
 public void valueChanged(ListSelectionEvent e)//监听的方法
 {   
   try
   {
   	this.vdata.removeAllElements();//清空数据
   	ResultSet rs;				//结果集
    Statement st=con.createStatement();//创建语句
    rs=st.executeQuery("select * from "+jl.getSelectedValue().toString().trim());//执行查询,当前选中表名中的数据	
    ResultSetMetaData rsmd=rs.getMetaData();//获取结果集的元数据
   
    int columnsCount=rsmd.getColumnCount();//获得结果集的列
    this.vcolumn.removeAllElements();//删除所有的列的信息
    for(int i=1;i<=columnsCount;i++)//遍历当前表的每一个列,获得列名
    {
     this.vcolumn.add(rsmd.getColumnName(i));
    }
   
    while(rs.next())//遍历每一行的数据
    {
     Vector temp=new Vector();//存放一行的数据
     for(int i=1;i<=columnsCount;i++)//遍历结果集的每一个列、获得数据
     {
      temp.add(rs.getString(i));
     }	
     this.vdata.add(temp);//存放每一行数据的向量	 
    }
    this.df.setDataVector(this.vdata,this.vcolumn);//更新数据
   }
   catch(Exception ez)
   {
    ez.printStackTrace();
   }
 }
 
 public void getConnection()
 {
 	v=new Vector();
 	try
 	{
 	 Class.forName("org.gjt.mm.mysql.Driver");
	 this.con=DriverManager.getConnection
	 (
		"jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8",
		"root",
		""
	 );
 	 
 	 DatabaseMetaData dm=con.getMetaData();//获取数据库元数据
 	 ResultSet rs=dm.getTables(null,null,null,new String[]{"TABLE"});
 	 while(rs.next())
 	 {
 	  v.add(rs.getString(3));//把表名放到第一块里
 	 }
 	}
 	catch(Exception e)
 	{
 		e.printStackTrace();
 	}
 }
 
 public static void main(String args[])
 {
  new DBManager();
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值