即使查询数据,DefaultTableModel也是空的



我尝试将ResultSet数据放入DefaultTableModel类的帮助下的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<>());
    }
}

当我调试这段代码时,我可以看到:

  • ResultSet rs has data,
  • ColumnNames已填充,
  • RowCount为零
  • ,我认为问题是这一行vector.add(rs.getObject(columnIndex));看起来我的向量变成空的,因为getObject()已经没有返回数据。

有人可以帮助我这个或解释问题在哪里?当我将生成的DefaultTableModel绑定到JTable时,它是空的(没有显示数据)。

我建议使用AbstractTableModel作为基础。几年前,我在Sun的示例中发现了一个名为JDBCAdapter.java的类。这门课能满足你的要求。在网上搜索这门课,你会找到一些东西,可能满足你的大部分需求。如果您的应用程序应该能够将更改写回DB,那么这可能是一个挑战,但只是为了显示表,这很好。

我刚刚发现了这个问题不久之前:问题是光标被设置为最后一行,因为其他方法已经在相同的ResultSet上迭代,因此光标必须再次设置为ResultSet类的第一行。

相关内容

  • 没有找到相关文章

最新更新