在 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 中。
回顾如下:
	/** 查询并返回记录集 */
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学习笔记——可视化Swing中JTable控件绑定SQL数据源的两种方法的更多相关文章

  1. 利用来JS控制页面控件显示和隐藏有两种方法

    利用来JS控制页面控件显示和隐藏有两种方法,两种方法分别利用HTML的style中的两个属性,两种方法的不同之处在于控件隐藏后是否还在页面上占空位. 方法一:  1 2 document.getEle ...

  2. PyQt(Python+Qt)学习随笔:QTableWidget中表格各列平均分配宽度的两种方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget表格部件中,如果需要实现表格中各列要占满部件中的可用空间,同时实现各列平分 ...

  3. Webform中Repeater控件--绑定嵌入C#代码四种方式

    网页里面嵌入C#代码用的是<% %>,嵌入php代码<?php ?> 绑定数据的四种方式: 1.直接绑定 <%#Eval("Code") %> ...

  4. c#中DropDownList控件绑定枚举数据

    c# asp.net 中DropDownList控件绑定枚举数据 1.枚举(enum)代码: private enum heros { 德玛 = , 皇子 = , 大头 = , 剑圣 = , } 如果 ...

  5. .Net平台Winform两个ComboBox控件绑定同一个数据源

    今天WINFROM编程遇到这么一个问题:是有关WINFORM中两个comboBox控件绑定同一个数据源的问题,在窗体的界面上有两个comboBox,我在Form1_Load中对他们做了数据绑定(具体代 ...

  6. 给Repeater控件里添加序号的5种方法

    Repeater是我们经常用的一个显示数据集的数据控件,经常我们希望在数据前显示数据的序号,那么我们该怎么为Repeater控件添加序号呢?下面编辑为大家介绍几种常用的为Repeater控件添加序号的 ...

  7. android 让一个控件按钮居于底部的几种方法

    android 让一个控件按钮居于底部的几种方法1.采用linearlayout布局:android:layout_height="0dp" <!-- 这里不能设置fill_ ...

  8. [Android] Android 让UI控件固定于底部的几种方法

    Android 让UI控件固定于底部的几种方法1.采用linearlayout布局:android:layout_height="0dp" <!-- 这里不能设置fill_p ...

  9. [转]android 让一个控件按钮居于底部的几种方法

    本文转自:http://www.cnblogs.com/zdz8207/archive/2012/12/13/2816906.html android 让一个控件按钮居于底部的几种方法 1.采用lin ...

随机推荐

  1. [Mugeda HTML5技术教程之4] Studio 概述

    Mugeda Studio 是基于云平台的制作HTML5动画的专业可视化集成开发环境,可以让你在不需要安装客户端程序的情况下,只通过浏览器就能轻松创作高质量的HTML5动画.HTML5动画相对于传统的 ...

  2. HTML&CSS基础学习笔记1.14—有序列表及列表嵌套

    我们上篇讲到了无序列表,那么今天就来看看有序列表和他们的组合嵌套使用吧. 有序列表 现在我们要做那堆杂事了,但是发现这么多杂事,先做哪个好呢?于是我们给这堆杂事弄个优先级排序,让我们能够按照顺序做下去 ...

  3. 关于Linux平台malloc的写时拷贝(延迟分配)【转】

    Linux内核定义了“零页面”(内容全为0的一个物理页,且物理地址固定),应用层的内存分配请求,如栈扩展.堆分配.静态分配等,分配线性地址后,就将页表项条目指向“零页面”(指定初始值的情况除外),这样 ...

  4. (摘)DataGuard物理standby管理 - 主备切换

    DataGuard物理standby管理 - 主备切换 Dataguard的切换分为两种,switchover和failover. switchover一般用于数据库或硬件升级,这时只需要较短时间中断 ...

  5. python的工作记录B

    这次很强了.就差最后一步,判断一下SVN的版本是否是真的库里的. #!/usr/bin/env python # -*- coding: utf-8 -*- import os,sys,command ...

  6. 2015第23周一SVN插件安装

    之前想把eclipse(3.7)的SVN插件版本从1.8.x降到1.6.x,上午折腾了好久没弄好,先是尝试在线安装,按网上说的1.6.x的url安装不成功(可能是网络问题,下载不到资源),然后尝试下载 ...

  7. bzoj 1193

    http://www.lydsy.com/JudgeOnline/problem.php?id=1193 大范围贪心,小范围宽搜. 膜拜大神 http://blog.csdn.net/u0129155 ...

  8. NOI2013 树的计数

    题目:http://uoj.ac/problem/122 85%做法: 动态规划. 首先重编号,BFS序变成1...n,然后DFS序相应重编号. 记pos[i]为i号点在DFS中的位置,即pos[d[ ...

  9. Windows下编译eXosip、osip,以及UAC和UAS的例子

    今天开始了SIP开源库的学习,我选择了osip和eXosip,但是这两个库的编译使用有些麻烦,源码下来之后编译会出现很多问题,网上也没有找到完整的编译介绍,只能一步一步的找办法解决,最后终于编译成功! ...

  10. 在线服装零售商Betabrand获得650万美元风投 - 投资风向 - 创业邦

    在线服装零售商Betabrand获得650万美元风投 - 投资风向 - 创业邦 在线服装零售商Betabrand获得650万美元风投