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

在 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 效果

时间: 2024-09-18 18:58:54

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

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

以下是对可视化Swing中JTable控件绑定SQL数据源的两种方法进行了详细的分析介绍,需要的朋友可以过来参考一下   在 MyEclipse 的可视化 Swing 中,有 JTable 控件. JTable 用来显示和编辑常规二维单元表. 那么,如何将 数据库SQL中的数据绑定至JTable中呢? 在这里,提供两种方法.JTable的构造方法通过查阅Java的API,可以可以得到JTable的两个重要的构造方法:JTable(Object[][] rowData, Object[] colu

基于java中byte数组与int类型的转换(两种方法)_java

java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型.下面有两种方式. public static byte[] int2byte(int res) { byte[] targets = new byte[4]; targets[0] = (byte) (res & 0xf

gridview中checkbox控件绑定数据的问题(100分)

问题描述 我正在做一个权限设置的模块,希望通过gridview实现,设想是gridview的列是根据数据库的字段动态生成的每个列头就是数据库字段名,列中是控件checkbox,checkbox是否被选中根据数据库中另外一个表的数据现在的问题是能动态生成列了,但是怎么给checkbox控件绑定数据啊~~ 解决方案 解决方案二:你那一列是什么字段,Bit类型,还是Boolean型,解决方案三:先转换成模版列.绑定然后解决方案四:<asp:TemplateColumnItemStyle-Wrap=&quo

Dev 控件绑定的数据源批量操作应避免自动刷新

        客户端批量操作数据时,控件自带的刷新操作,会造成不必要的时间消耗.         当数据源(如DataTable.Array.List.ObservableCollection或其他IListSource等)被绑定到控件时,批量操作数据时应该断开绑定或挂起控件的刷新. gridControl1.DataSource = null; //逻辑处理 //处理 //处理 gridControl1.DataSource = this.ds.Tables[0].DefaultView;

iOS开发中UITableview控件的基本使用及性能优化方法_IOS

UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) 复制代码 代码如下: #import <Foundation/Foundation.h> @interface NJHero : NSObject /**  *  头像  */ @property (nonatomic, copy) NSString *icon; /**  *  名称  */ @property (nonatomic, copy) NSString *name; /**  

WinForm中DataGridView控件绑定列顺序

今天遇到家这种情况,在网上查到的下面这文章,这个 AutoGenerateColumns属性没有在属性列表中显示,只能手写,记录一下 绑定一个DataGridView后显示出来的列的顺序有时候后会乱七八糟不按照你预想的顺序来排列,这时候怎么办呢?      有人说      customersDataGridView.Columns["CustomerID"].Visible = false;    customersDataGridView.Columns["Contact

把excel表格里的数据导入sql数据库的两种方法_MsSql

本来最近在研究微信公众平台的,老大临时交我个任务,把excel表格里的数据导入sql数据库,我想这so easy嘛. 没想都在上面消磨了两天... 把情况介绍下:在数据库中有如下这样结构的表(A表) 我只取关键的及列里面还有很多数据. 有一张id和name对照的excel文件(B表)和N张结构类似的excel表(C表)(没有id那一列)              我的任务在B表中找到C表中数据对应的id后,然后将id加到C表中,最后根据id是唯一的,用C表的数据去更新A表的数据.这里主要涉及了e

把excel表格里的数据导入sql数据库的两种方法

本来最近在研究微信公众平台的,老大临时交我个任务,把excel表格里的数据导入sql数据库,我想这so easy嘛. 没想都在上面消磨了两天... 把情况介绍下:在数据库中有如下这样结构的表(A表) 我只取关键的及列里面还有很多数据. 有一张id和name对照的excel文件(B表)和N张结构类似的excel表(C表)(没有id那一列) 我的任务在B表中找到C表中数据对应的id后,然后将id加到C表中,最后根据id是唯一的,用C表的数据去更新A表的数据.这里主要涉及了excel表格和数据库表间的

使用XML为列表控件绑定数据

了解使用XML为列表控件绑定数据的各种不同的方法.介绍在web开发项目中,我们需要经常写一些代码从数据源读取动态数据到列表控件中.在经典ASP时期,这是一件相对比较困难的任务.例如,我们必须查询数据库,找回 RecordSet 并且在手动创建HTML标签时还要重述 RecordSet .现在在ASP.NET中,你做同样的事情有了更好的办法.此外,除了用数据库作为数据源,你还可以使用各种数据源,比如XML文件.哪一个更好呢?这会在性能.适应性.可靠性.易配置性.安全等方面引起争论.在这里,我不想讨