欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-16 16:58:40
在 myeclipse 的可视化 swing 中,有 jtable 控件。jtable 用来显示和编辑常规二维单元表。那么,如何将 数据库sql中的数据绑定至jtable中...

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

整体代码视图:
整体代码视图:可视化Swing中JTable控件绑定SQL数据源的两种方法深入解析
最终jtable效果图:

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


方法二:通过model绑定该方法用到的构造方法为:

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

设置model路径

进入 jtable 控件的控制面板,点击model。

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

选择model来自代码。

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

填写 model 的方法路径:包名.java文件名.方法名。

为了调用方便,建议将方法设置为静态方法。

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


写入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 效果

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

上一篇:

下一篇: