程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 可視化Swing中JTable控件綁定SQL數據源的兩種方法深入解析

可視化Swing中JTable控件綁定SQL數據源的兩種方法深入解析

編輯:更多關於編程
    以下是對可視化Swing中JTable控件綁定SQL數據源的兩種方法進行了詳細的分析介紹,需要的朋友可以過來參考一下  

    在 MyEclipse 的可視化 Swing 中,有 JTable 控件。
    JTable 用來顯示和編輯常規二維單元表。
    那麼,如何將 數據庫SQL中的數據綁定至JTable中呢?
    在這裡,提供兩種方法。
    JTable的構造方法
    通過查閱Java的API,可以可以得到JTable的兩個重要的構造方法:
    JTable(Object[][] rowData, Object[] columnNames)
    構造一個 JTable 來顯示二維數組 rowData 中的值,其列名稱為 columnNames。
    JTable(TableModel dm)
    構造一個 JTable,使用數據模型 dm、默認的列模型和默認的選擇模型對其進行初始化。

    以下,我們就通過這兩個構造方法來將JTable綁定到SQL數據庫。

    必要的准備工作
    一、有一個可供綁定的數據庫。
    二、在可視化Swing中拖拉進來一個Jtable控件。

    方法一:通過二維數組綁定
    該方法用到的構造方法為:
    JTable(Object[][] rowData, Object[] columnNames)
    構造一個 JTable 來顯示二維數組 rowData 中的值,其列名稱為 columnNames。
    構建二維數組rowData
    通過上節博文“預編譯”的學習,我們已經能夠將SQL數據庫讀取至ResultSet 中。
    《JDBC之PreparedStatement類中預編譯的綜合應用解析》
    回顧如下:

    復制代碼 代碼如下:
     /** 查詢並返回記錄集 */
     public ResultSet getResultSet(String sql, Object[] objArr){
      getConnection();
      try {
       pStatement = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
       if(objArr!=null && objArr.length>0) {
        for (int i = 0; i < objArr.length; i++) {
         pStatement.setObject(i+1, objArr[i]);
        }
       }
       rSet = pStatement.executeQuery();
       //list = resultSetToList(rs);
      } catch (SQLException e) {
       e.printStackTrace();
      } finally {
       //close();
      }
      return rSet;
     }


    【注】只是與上節博客的方法名不同而已。。
    現在,我們為了將ResultSet 轉化為二維數組,寫如下方法:

    復制代碼 代碼如下:
     /** 把結果集轉成Object[][] */
     public Object[][] resultSetToObjectArray(ResultSet rs) {
      Object[][] data = null;
      try { 
       rs.last();
       int rows = rs.getRow();
       data = new Object[rows][]; 
       ResultSetMetaData md = rs.getMetaData();//獲取記錄集的元數據
       int columnCount = md.getColumnCount();//列數
       rs.first();
       int k = 0;
       while(rs.next()) {
        System.out.println("i"+k);
        Object[] row = new Object[columnCount];
        for(int i=0; i<columnCount; i++) {
         row[i] = rs.getObject(i+1).toString();
        }
        data[k] = row;
        k++;
       }
      } catch (Exception e) {
      }
      return data;
     } 


    並將這兩個方法存至文件UserDAO.java中。
    在Swing所在的Java文件中先實例化UserDAO:

    復制代碼 代碼如下:
     UserDAO userDAO = new UserDAO();


    即可將SQL數據轉化為二維數組:

    復制代碼 代碼如下:
      Object[][] dataObjects = userDAO.resultSetToObjectArray(userDAO.getResultSet(
          "select id,username,password from t_userr", null));


    構建列名稱 columnNames
    這個比較簡單,只需要將列名稱寫入String數組即可。

    復制代碼 代碼如下:
     String[] tableStrings = { "id", "username", "password" };


    構建JTable的Model:

    復制代碼 代碼如下:
     jTable1.setModel(new DefaultTableModel(dataObjects, tableStrings));


    整體代碼視圖:
    整體代碼視圖:
    最終JTable效果圖:



    方法二:通過Model綁定該方法用到的構造方法為:

    JTable(TableModel dm)
    構造一個 JTable,使用數據模型 dm、默認的列模型和默認的選擇模型對其進行初始化。

    設置Model路徑

    進入 JTable 控件的控制面板,點擊model。

    選擇Model來自代碼。

    填寫 model 的方法路徑:包名.Java文件名.方法名。

    為了調用方便,建議將方法設置為靜態方法。

     

    寫入Model 方法

    在剛剛設置的路徑下寫入Model的方法,注意其返回類型為TableModel。

    方法的寫法與上面的大同小異,不再贅述。

    復制代碼 代碼如下:
     public static TableModel Member() {
      String[][] playerInfo = new String[80][8];
      BaseDAO bDao = new BaseDAO();
      String sql = "select id,realName,username,sex,phone,email,vocation,city from jdbctest";
      String[] ss = {};
      ArrayList<HashMap<Object, Object>> list = bDao.Query(sql, ss);
    //  bDao.AllArray(list);
      int i = 0, j = 0;
      for (HashMap<Object, Object> maps : list) {
       Set<Object> keysObjects = maps.keySet();
       for (Object kObject : keysObjects) {
        playerInfo[i][j] = maps.get(kObject).toString();
        j++;
       }
       i++;
       j = 0;
      }
      String[] Names = { "id", "username", "sex", "phone","vocation","email","realName",   "city" };
      DefaultTableModel dModel = new DefaultTableModel(playerInfo, Names);
      return (TableModel)dModel;
     }


    JTable 效果

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved