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

时间:2016-11-17 13:30:34

标签: java swing jdbc resultset defaulttablemodel

我尝试在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<>());
    }
}

当我调试此代码时,我能够看到:

  • ResultSet rs包含数据
  • ColumnNames已填充,
  • RowCount为零
  • 我认为问题就在于这一行vector.add(rs.getObject(columnIndex)); 看起来我的矢量变空了,因为getObject()已经没有数据返回。

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

2 个答案:

答案 0 :(得分:0)

我建议使用AbstractTableModel作为基础。几年前,我在Sun的例子中发现了一个名为JDBCAdapter.java的类。这个课有,你想要什么。在网上搜索此课程,您将获得满足您大部分需求的内容。如果您的应用程序应该能够将更改写回数据库,那么这可能是一个挑战,但只是为了显示表格。

答案 1 :(得分:0)

我刚刚发现问题:问题是游标被设置为最后一行的事实,因为其他方法已经在同一个ResultSet上迭代,因此必须使用first-method再次将游标设置为第一行ResultSet类。