即使查询数据,DefaultTableModel 也是空的
DefaultTableModel is empty even tho data is queried
我尝试借助 DefaultTableModel class 将我的 ResultSet 数据放入 JTable。作为一种解决方案,我在 Whosebug 上找到了一个解决方案,但对其进行了一些修改(此处并不相关):
public static DefaultTableModel buildTableModel(ResultSet rs) {
try {
ResultSetMetaData metaData = rs.getMetaData();
Vector<String> columnNames = new Vector<String>();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount;++column) {
columnNames.add(metaData.getColumnName(column));
}
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount;++columnIndex) {
vector.add(rs.getObject(columnIndex));
}
data.add(vector);
}
return new DefaultTableModel(data, columnNames);
} catch(SQLException e) {
e.printStackTrace();
return new DefaultTableModel(new Vector<>(), new Vector<>());
}
}
当我调试这段代码时,我能够看到:
- 结果集
rs
有数据,
ColumnNames
已填充,
- RowCount 为零
- 我认为问题出在这一行
vector.add(rs.getObject(columnIndex));
看起来我的矢量变空了,因为 getObject()
returns 已经没有数据了。
有人可以帮我解决这个问题或解释问题出在哪里吗?当我将生成的 DefaultTableModel 绑定到我的 JTable 时,它是空的(没有显示数据)。
我建议使用 AbstractTableModel 作为基础。几年前,我在 Sun 的示例中发现了一个名为 JDBCAdapter.java 的 class。这 class 可以满足您的需求。在网络上搜索此 class,您将得到可能满足您大部分需求的东西。这可能是一个挑战,如果您的应用程序应该能够将更改写回数据库,但只是为了显示 table 没问题。
我不久前才发现这个问题:问题是游标被设置到最后一行,因为其他方法已经迭代了同一个结果集,因此游标必须再次设置为第一行 first -ResultSet 的方法 class.
我尝试借助 DefaultTableModel class 将我的 ResultSet 数据放入 JTable。作为一种解决方案,我在 Whosebug 上找到了一个解决方案,但对其进行了一些修改(此处并不相关):
public static DefaultTableModel buildTableModel(ResultSet rs) {
try {
ResultSetMetaData metaData = rs.getMetaData();
Vector<String> columnNames = new Vector<String>();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount;++column) {
columnNames.add(metaData.getColumnName(column));
}
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount;++columnIndex) {
vector.add(rs.getObject(columnIndex));
}
data.add(vector);
}
return new DefaultTableModel(data, columnNames);
} catch(SQLException e) {
e.printStackTrace();
return new DefaultTableModel(new Vector<>(), new Vector<>());
}
}
当我调试这段代码时,我能够看到:
- 结果集
rs
有数据, ColumnNames
已填充,- RowCount 为零
- 我认为问题出在这一行
vector.add(rs.getObject(columnIndex));
看起来我的矢量变空了,因为getObject()
returns 已经没有数据了。
有人可以帮我解决这个问题或解释问题出在哪里吗?当我将生成的 DefaultTableModel 绑定到我的 JTable 时,它是空的(没有显示数据)。
我建议使用 AbstractTableModel 作为基础。几年前,我在 Sun 的示例中发现了一个名为 JDBCAdapter.java 的 class。这 class 可以满足您的需求。在网络上搜索此 class,您将得到可能满足您大部分需求的东西。这可能是一个挑战,如果您的应用程序应该能够将更改写回数据库,但只是为了显示 table 没问题。
我不久前才发现这个问题:问题是游标被设置到最后一行,因为其他方法已经迭代了同一个结果集,因此游标必须再次设置为第一行 first -ResultSet 的方法 class.