源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

可视化Swing中JTable控件绑定SQL数据源的两种方法深入解析

  • 时间:2020-11-07 07:30 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:可视化Swing中JTable控件绑定SQL数据源的两种方法深入解析
在 MyEclipse 的可视化 Swing 中,有 JTable 控件。 JTable 用来显示和编辑常规二维单元表。 那么,如何将 数据库SQL中的数据绑定至JTable中呢? 在这里,提供两种方法。 [b]JTable的构造方法 [/b]通过查阅Java的API,可以可以得到JTable的两个重要的构造方法: JTable(Object[][] rowData, Object[] columnNames) 构造一个 JTable 来显示二维数组 rowData 中的值,其列名称为 columnNames。 JTable(TableModel dm) 构造一个 JTable,使用数据模型 dm、默认的列模型和默认的选择模型对其进行初始化。 以下,我们就通过这两个构造方法来将JTable绑定到SQL数据库。 [b]必要的准备工作 [/b]一、有一个可供绑定的数据库。 二、在可视化Swing中拖拉进来一个Jtable控件。 [b]方法一:通过二维数组绑定 [/b]该方法用到的构造方法为: JTable(Object[][] rowData, Object[] columnNames) 构造一个 JTable 来显示二维数组 rowData 中的值,其列名称为 columnNames。 构建二维数组rowData 通过上节博文“预编译”的学习,我们已经能够将SQL数据库读取至ResultSet 中。 [b][url=http://www.1sucai.cn/article/40138.htm]《JDBC之PreparedStatement类中预编译的综合应用解析》 [/url][/b]回顾如下:
[u]复制代码[/u] 代码如下:
 /** 查询并返回记录集 */  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 转化为二维数组,写如下方法:
[u]复制代码[/u] 代码如下:
 /** 把结果集转成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:
[u]复制代码[/u] 代码如下:
 UserDAO userDAO = new UserDAO();
即可将SQL数据转化为二维数组:
[u]复制代码[/u] 代码如下:
  Object[][] dataObjects = userDAO.resultSetToObjectArray(userDAO.getResultSet(       "select id,username,password from t_userr", null));
构建列名称 columnNames 这个比较简单,只需要将列名称写入String数组即可。
[u]复制代码[/u] 代码如下:
 String[] tableStrings = { "id", "username", "password" };
构建JTable的Model:
[u]复制代码[/u] 代码如下:
 jTable1.setModel(new DefaultTableModel(dataObjects, tableStrings));
整体代码视图: 整体代码视图:[img]http://img.1sucai.cn/uploads/article/2018010710/20180107100102_0_58909.jpg[/img] 最终JTable效果图: [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100103_1_44564.jpg[/img] [b]方法二:通过Model绑定该方法用到的构造方法为: [/b] [b]JTable(TableModel dm) [/b]构造一个 JTable,使用数据模型 dm、默认的列模型和默认的选择模型对其进行初始化。 [b]设置Model路径[/b] 进入 JTable 控件的控制面板,点击model。 [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100104_2_41068.jpg[/img] 选择Model来自代码。 [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100104_3_3239.jpg[/img] 填写 model 的方法路径:包名.Java文件名.方法名。 为了调用方便,建议将方法设置为静态方法。 [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100104_4_65064.jpg[/img] [b]写入Model 方法[/b] 在刚刚设置的路径下写入Model的方法,注意其返回类型为TableModel。 方法的写法与上面的大同小异,不再赘述。
[u]复制代码[/u] 代码如下:
 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;  }
[b]JTable 效果[/b] [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100105_5_48831.jpg[/img]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部