下面是一段从数据库取数据,然后添加到jtable的jbinit()代码
ResultSetMetaData rsd = null;
Vector col = new Vector();
Vector dat = new Vector();
sql d = new sql();
Connection con = null;
con = d.date();
Statement s = con.createStatement();
ResultSet rs = s.executeQuery("Select * from yuangongxinxi");
rsd = rs.getMetaData();
int i = 0;
for (i = 1; i <= rsd.getColumnCount(); i++) {
col.add(rsd.getColumnName(i));
} while (rs.next()) {
Vector v = new Vector();
for (i = 1; i <= rsd.getColumnCount(); i++) { v.addElement(rs.getString(i));
}
dat.addElement(v);
}
table = new JTable(dat, col);
table.setBounds(new Rectangle(11, 0, 266, 117));
我想知道的是,这里v.addElement(rs.getString(i));已经循环取值,为什么还要将Vector实例v追加到Vector实例dat里,然后再显示出来,有什么好处吗?v和dat不是同一类吗?
ResultSetMetaData rsd = null;
Vector col = new Vector();
Vector dat = new Vector();
sql d = new sql();
Connection con = null;
con = d.date();
Statement s = con.createStatement();
ResultSet rs = s.executeQuery("Select * from yuangongxinxi");
rsd = rs.getMetaData();
int i = 0;
for (i = 1; i <= rsd.getColumnCount(); i++) {
col.add(rsd.getColumnName(i));
} while (rs.next()) {
Vector v = new Vector();
for (i = 1; i <= rsd.getColumnCount(); i++) { v.addElement(rs.getString(i));
}
dat.addElement(v);
}
table = new JTable(dat, col);
table.setBounds(new Rectangle(11, 0, 266, 117));
我想知道的是,这里v.addElement(rs.getString(i));已经循环取值,为什么还要将Vector实例v追加到Vector实例dat里,然后再显示出来,有什么好处吗?v和dat不是同一类吗?
Vector v = new Vector();
for (i = 1; i <= rsd.getColumnCount(); i++) { v.addElement(rs.getString(i));
}
dat.addElement(v);
}
这段代码循环一次 V就会被重新实例化一次 如果把table = new JTable(dat, col);改为table = new JTable(V, col);的话那么V中就只有一条数据,就是循环的最后一条。其实这段代码可以写为:
while (rs.next()) {
// Vector v = new Vector();
for (i = 1; i <= rsd.getColumnCount(); i++) {
//v.addElement(rs.getString(i));
dat.addElement(rs.getString(i));
}
// dat.addElement(v);
}
因为你的程序里没有使用BEAN来封装单条数据,而是用Vector来封装单挑数据,所以你看上去有些糊涂
你可以理解成里面的Vector是封装的查询结果二维表力的单条数据,也就是一行。
而外面的Vector是封装每条数据的数据集,也就好比是整个二维表。