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

2016-02-19 08:57 85 1 收藏

图老师小编精心整理的可视化Swing中JTable控件绑定SQL数据源的两种方法深入解析希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

【 tulaoshi.com - 编程语言 】

在 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.length0) {
    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; icolumnCount; 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。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

选择Model来自代码。

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

写入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 = {};
  ArrayListHashMapObject, Object list = bDao.Query(sql, ss);
//  bDao.AllArray(list);
  int i = 0, j = 0;
  for (HashMapObject, Object maps : list) {
   SetObject 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 效果

来源:http://www.tulaoshi.com/n/20160219/1588960.html

延伸阅读
    为了测试我的一个业务系统在不同数据库上的表现,我的tomcat上配置了多个数据源,这样我可以轻松的切换系统到不同的数据源上。为了监测每个数据源的运行状况,随时观测执行的sql语句,我为每个数据源都配置了JDBMonitor,并且这些数据源的JDBMonitor的配置文件共用一个config.xml文件。     但是在...
Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array...
--谨献给我一样试图使用JNI把java和naitve window掺和在一起的developer SWT与AWT本质上都是一套依赖于操作系统具体实现的GUI库。与swing在所有操作系统上外观一致的做法不同,awt和swt在不同的操作系统上的外观是和本地窗口一样的。 每一个swt和awt的窗口都对应一个本地窗口(native window),自然也会有一个窗口句柄。而swing则不同,...
需要寻找信息图灵感?又或者需要制作一些数据信息图?那么今天分享的25个可视化信息图表素材你一定能派上用场。这里的可视化素数据材风格多样化,有常用的数据柱状图、人物模型、创意图像等,外面流行时尚,适合大部分数据信息展示。 Infographic Template   进入下载页 Infographic Elements Pack   进入下载页 Infographic...
标签: 办公软件
在用Excel录入完大量数据后,不可避免地会产生许多错误。通常而言,多数用户都是一手拿着原始数据,一手指着计算机屏幕,进行手工的数据校验,这不但容易导致眼睛疲劳,而且效率不高。为此,笔者特向大家介绍两种轻松且高效的数据校验方法 一、语音校验法 我们可以使用Excel的“文本到语音”功能,将Excel工作表中的数据读出来给...

经验教程

130

收藏

35
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部