我尝试在DefaultTableModel类的帮助下将ResultSet数据放入JTable中。作为一个解决方案,我在Stackoverflow上找到了一个解决方案,但稍微修改了一下(这里不太相关):
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
已填充,vector.add(rs.getObject(columnIndex));
看起来我的矢量变空了,因为getObject()
已经没有数据返回。有人可以帮我解决这个问题或解释问题所在吗?当我将生成的DefaultTableModel绑定到JTable时,它是空的(没有显示数据)。
答案 0 :(得分:0)
我建议使用AbstractTableModel作为基础。几年前,我在Sun的例子中发现了一个名为JDBCAdapter.java的类。这个课有,你想要什么。在网上搜索此课程,您将获得满足您大部分需求的内容。如果您的应用程序应该能够将更改写回数据库,那么这可能是一个挑战,但只是为了显示表格。
答案 1 :(得分:0)
我刚刚发现问题:问题是游标被设置为最后一行的事实,因为其他方法已经在同一个ResultSet上迭代,因此必须使用first-method再次将游标设置为第一行ResultSet类。