首页 > Java开发 > Java学习笔记——可视化Swing中JTable控件绑定SQL数据源的两种方法

Java学习笔记——可视化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 中。
博文见http://blog.csdn.net/jueblog/article/details/9622159
回顾如下:
[java][/java] view plaincopy

  1. /** 查询并返回记录集 */
  2. public ResultSet getResultSet(String sql, Object[] objArr){
  3.     getConnection();
  4.     try {
  5.         pStatement = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
  6.         if(objArr!=null && objArr.length>0) {
  7.             for (int i = 0; i < objArr.length; i++) {
  8.                 pStatement.setObject(i+1, objArr[i]);
  9.             }
  10.         }
  11.         rSet = pStatement.executeQuery();
  12.         //list = resultSetToList(rs);
  13.     } catch (SQLException e) {
  14.         e.printStackTrace();
  15.     } finally {
  16.         //close();
  17.     }
  18.     return rSet;
  19. }

【注】只是与上节博客的方法名不同而已。。

现在,我们为了将ResultSet 转化为二维数组,写如下方法:
[java][/java] view plaincopy

  1. /** 把结果集转成Object[][] */
  2. public Object[][] resultSetToObjectArray(ResultSet rs) {
  3.     Object[][] data = null;
  4.     try {
  5.         rs.last();
  6.         int rows = rs.getRow();
  7.         data = new Object[rows][];
  8.         ResultSetMetaData md = rs.getMetaData();//获取记录集的元数据
  9.         int columnCount = md.getColumnCount();//列数
  10.         rs.first();
  11.         int k = 0;
  12.         while(rs.next()) {
  13.             System.out.println("i"+k);
  14.             Object[] row = new Object[columnCount];
  15.             for(int i=0; i<columnCount; i++) {
  16.                 row[i] = rs.getObject(i+1).toString();
  17.             }
  18.             data[k] = row;
  19.             k++;
  20.         }
  21.     } catch (Exception e) {
  22.     }
  23.     return data;
  24. }

并将这两个方法存至文件UserDAO.java中。

在Swing所在的Java文件中先实例化UserDAO:
[java][/java] view plaincopy

  1. UserDAO userDAO = new UserDAO();

即可将SQL数据转化为二维数组:

[java][/java] view plaincopy

  1. Object[][] dataObjects = userDAO.resultSetToObjectArray(userDAO.getResultSet(
  2.                 "select id,username,password from t_userr", null));

构建列名称 columnNames

这个比较简单,只需要将列名称写入String数组即可。

[java][/java] view plaincopy

  1. String[] tableStrings = { "id", "username", "password" };

构建JTable的Model:

[java][/java] view plaincopy

  1. jTable1.setModel(new DefaultTableModel(dataObjects, tableStrings));

整体代码视图:

最终JTable效果图:

方法二:通过Model绑定

该方法用到的构造方法为:

JTable(TableModel dm)
构造一个 JTable,使用数据模型 dm、默认的列模型和默认的选择模型对其进行初始化。

设置Model路径

进入 JTable 控件的控制面板,点击model。
选择Model来自代码。
填写 model 的方法路径:包名.Java文件名.方法名。
为了调用方便,建议将方法设置为静态方法。

写入Model 方法

在刚刚设置的路径下写入Model的方法,注意其返回类型为TableModel。
方法的写法与上面的大同小异,不再赘述。
[java][/java] view plaincopy

  1.     public static TableModel Member() {
  2.         String[][] playerInfo = new String[80][8];
  3.         BaseDAO bDao = new BaseDAO();
  4.         String sql = "select id,realName,username,sex,phone,email,vocation,city from jdbctest";
  5.         String[] ss = {};
  6.         ArrayList<HashMap<Object, Object>> list = bDao.Query(sql, ss);
  7. //      bDao.AllArray(list);
  8.         int i = 0, j = 0;
  9.         for (HashMap<Object, Object> maps : list) {
  10.             Set<Object> keysObjects = maps.keySet();
  11.             for (Object kObject : keysObjects) {
  12.                 playerInfo[i][j] = maps.get(kObject).toString();
  13.                 j++;
  14.             }
  15.             i++;
  16.             j = 0;
  17.         }
  18.         String[] Names = { "id", "username", "sex", "phone","vocation","email","realName",   "city" };
  19.         DefaultTableModel dModel = new DefaultTableModel(playerInfo, Names);
  20.         return (TableModel)dModel;
  21.     }

JTable 效果


本文固定链接: http://www.devba.com/index.php/archives/2026.html | 开发吧

报歉!评论已关闭.