1. 程式人生 > >在Java Swing的JTable顯示資料庫中的記錄

在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;
  
 }