可视化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、默认的列模型和默认的选择模型对其进行初始化。
进入 jtable 控件的控制面板,点击model。
选择model来自代码。
填写 model 的方法路径:包名.java文件名.方法名。
为了调用方便,建议将方法设置为静态方法。
在刚刚设置的路径下写入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 效果