连接数据库后......
ResultSet result = stmt.executeQuery("SELECT * FROM `students`"); /*stmt is a Statement*/
ResultSetMetaData md = result.getMetaData();
int columnCount = md.getColumnCount();
Vector columns = new Vector(columnCount);
Vector data = new Vector();
Vector row = new Vector(columnCount);
for(int i=1; i<=columnCount; i++){
columns.add(md.getColumnName(i));
}
while(result.next()){
for(int j=1; j<=columnCount; j++){
row.add(result.getString(j));
data.addElement(row);
}
}
JTable table = new JTable(data, columns); /* Bla Bla Bla about the Table... */
此代码在SWING框架上显示MySQL表,但只有第一行重复。为什么呢?
答案 0 :(得分:1)
这是因为您为所有行使用了Vector row = new Vector(columnCount);
的一个实例。像下一个一样更改你的代码:
while (result.next()) {
Vector row = new Vector(columnCount);
for (int j = 1; j <= columnCount; j++) {
row.add(result.getString(j));
}
data.addElement(row);
}
答案 1 :(得分:1)
在while循环中写入Vector row = new Vector(columnCount);
,您实际上将结果添加到行中,如下所示:
while(result.next()){
Vector row = new Vector(columnCount);
for(int j=1; j<=columnCount; j++){
row.add(result.getString(j));
data.addElement(row);
}
}
答案 2 :(得分:0)
获取tablemodel并向其添加行并将模型设置回表
e.g。
DefaultTableModel model = (DefaultTableModel )table.getModel();
while (result.next()) {
Vector data = new Vector();
for (int j = 1; j <= columnCount; j++) {
data.add(result.getString(j));
}
model.addRow(data);
}
table.setModel(model);
或
DefaultTableModel model = new DefaultTableModel();
model.setColumnIdentifiers(columns);// pass your column names as a vector
while (result.next()) {
Vector data = new Vector();
for (int j = 1; j <= columnCount; j++) {
data.add(result.getString(j));
}
model.addRow(data);
}
JTable table = new Jtable(model);