在Java Swing的JTable显示数据库中的记录

 在这里我说到两个方面的内容,一个是java GUI(用户图形界面),一个是JDBC(JAVA访问数据库)。两个方面的内容.

我们先说JDBC,然后将查询的内容显示到JTable中

 

要访问数据库,当然要导入驱动包,我这里使用的是mysql,所以导入的是msyql的驱动程序包mysql-connector-java-3.1.12-bin.jar.

并加入至classpath或导入lib目录中.

然后我建立一个访问数据库的工具类,里面有连接数据库,关闭数据库。操作数据库的方法函数

 

 //插入字符串
 private String insertSQL="insert into customer(account,password,cname,cbalance,birthday) values(?,?,?,?,?)";
 //更新字符串
 private String updateSQL="update customer set account=?,password=?,cname=?,cbalance=?,birthday=? where id=?";
 //删除字符串
 private String deleteSQL="delete from customer where id=?";
 //查询字符串
 private static String selectSQL="select * from customer";

 

连接数据库对象:

    Class.forName("com.mysql.jdbc.Driver");
   conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123");//注意还要加入异常捕获

 

//关闭数据库连接对象
 public void close(){
  if(conn!=null){
   try {
    conn.close();
   } catch (SQLException e) {
    e.printStackTrace();
   }
   conn=null;
  }
 }

 

下面讲解一个查询数据库的内容至ArrayList对象中的方法:

 //查询的记录存储到集合对象中
 public ResultSet getRS(String selectSQL){
  try{
   ps=conn.prepareStatement(selectSQL);
   rs=ps.executeQuery();
  }catch(Exception evt){
   evt.printStackTrace();
  }
  return rs;
 }

 

 

下面在GUI类中利用上面的查询结果al。

   String[] col = { "序号", "帐号", "密码","真实姓名","金额","出生日期" };
   DefaultTableModel mm = new DefaultTableModel(col, 0); // 定义一个表的模板
   try {
    
    ResultSet rs =new ConnDBUtils().getRS("select * from customer");// 将查询得到的结果集给rs
    while (rs.next()) {
     String id = String.valueOf(rs.getInt("id"));
     String account = rs.getString("account");
     ---------------------------------------------------------

     ----------------------------------------------------------


     String[] str_row = {id, account,password,cname,cbalance,birthday}; // 将一行的数据存在str_row
               // 字符串数组里
     mm.addRow(str_row);// 添加在表模板中
    }
    jtable.setModel(mm);// 将jtable这个表 设置为刚刚定义的模板

上面的这段代码,可以加到button的actionPerformed()中,这样就可以实现动态加载,比如用户点击查询,就出来查询的结果显示出来.

当然ConnDBUtils类中还提拱了一些插入,删除,更新等操作.

//插入操作
 public String  insertData(customer cust){//将对象属性值插入
  try{
   ps=conn.prepareStatement(insertSQL);
   ps.setString(1, cust.getAccount());
   ps.setString(2, cust.getPassword());
   ps.setString(3,cust.getCname());
   ps.setDouble(4,cust.getCbalance());
   ps.setString(5,cust.getBirthday());
   flag=ps.executeUpdate();
   if(flag>0){
    str="插入操作成功";
   }else{
    str="插入操作失败,请重试";
   }
  }catch(Exception evt){
   evt.printStackTrace();
   
  }
  return str;
 }
 
 //更新操作
 public String  updateData(customer cust){
  try{
   ps=conn.prepareStatement(this.updateSQL);
   
   ps.setString(1, cust.getAccount());
   ps.setString(2, cust.getPassword());
   ps.setString(3,cust.getCname());
   ps.setDouble(4,cust.getCbalance());
   ps.setString(5,cust.getBirthday());
   
   ps.setInt(6,cust.getId());
   //主键值传入
   if(ps.executeUpdate()>0){
    str="更新操作成功";
   }else{
    str="更新操作失败";
   }
   
  }catch(Exception evt){
   evt.printStackTrace();
  }
  return str;
 }
 
 //删除操作
 public String deleteData(int id){
  //根据主键即可
         try{
          ps=conn.prepareStatement(this.deleteSQL);
          ps.setInt(1, id);
          if(ps.executeUpdate()>0){
           str="删除操作成功";
          }
          else{
           str="删除操作成功";
          }
         }catch(Exception evt){
          evt.printStackTrace();
         }
  return str;
 }
 当然一个完整的查询至集合的方法是:

//查询的记录存储到集合对象中
 public ArrayList getData(String sqlStr){
  ArrayList al=new ArrayList();
  try{
      ps=conn.prepareStatement(sqlStr);
   rs=ps.executeQuery();
   while(rs.next()){
    customer cust=new customer();
    cust.setId(rs.getInt("id"));
    cust.setAccount(rs.getString("account"));
    cust.setPassword(rs.getString("password"));
    cust.setBirthday(rs.getString("birthday"));
    cust.setCbalance(rs.getDouble("cbalance"));
    cust.setCname(rs.getString("cname"));
    al.add(cust);
   }
   
  }catch(Exception evt){
   evt.printStackTrace();
  }
  
  return al;
  
 }

 

  • 9
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值