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

 更新时间:2013年07月31日 09:15:44   作者:  
以下是对可视化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 中。
《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 效果

相关文章

  • Java的锁机制:synchronized和CAS详解

    Java的锁机制:synchronized和CAS详解

    这篇文章主要介绍了Java的锁机制synchronized和CAS详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-09-09
  • 深入剖析Java ArrayQueue(JDK)的源码

    深入剖析Java ArrayQueue(JDK)的源码

    本篇文章主要给大家介绍一个比较简单的JDK为我们提供的容器ArrayQueue,这个容器主要是用数组实现的一个单向队列,整体的结构相对其他容器来说就比较简单了,感兴趣的可以了解一下
    2022-08-08
  • Java 对象在 JVM 中的内存布局超详细解说

    Java 对象在 JVM 中的内存布局超详细解说

    这篇文章主要介绍了Java 对象在 JVM 中的内存布局超详细解说,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 解决idea报错 Connot resolve column 的问题

    解决idea报错 Connot resolve column 的问题

    这篇文章主要介绍了解决idea报错 Connot resolve column 的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • springboot 日志彩色消失的2种解决方案

    springboot 日志彩色消失的2种解决方案

    这篇文章主要介绍了springboot 日志彩色消失的2种解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Spring AOP中的JDK和CGLib动态代理哪个效率更高?

    Spring AOP中的JDK和CGLib动态代理哪个效率更高?

    今天小编就为大家分享一篇关于Spring AOP中的JDK和CGLib动态代理哪个效率更高?,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 如何用java获取指定日期是第几周

    如何用java获取指定日期是第几周

    这篇文章主要给大家介绍了关于如何用java获取指定日期是第几周的相关资料,在开始之前我们需要先了解如何获取当前日期所在的年份以及第几周,在Java中可以使用Calendar类来获取这些信息,需要的朋友可以参考下
    2023-09-09
  • springboot快速整合Mybatis组件的方法(推荐)

    springboot快速整合Mybatis组件的方法(推荐)

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这篇文章主要介绍了springboot快速整合Mybatis组件的方法,需要的朋友可以参考下
    2019-11-11
  • mybatis多个plugins的执行顺序解析

    mybatis多个plugins的执行顺序解析

    这篇文章主要介绍了mybatis多个plugins的执行顺序解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java每隔两个数删掉一个数问题详解

    Java每隔两个数删掉一个数问题详解

    这篇文章主要介绍了Java每隔两个数删掉一个数问题详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论