Java 从数据库获取数据后,jTable不显示任何内容

Java 从数据库获取数据后,jTable不显示任何内容,java,swing,netbeans,jtable,defaulttablemodel,Java,Swing,Netbeans,Jtable,Defaulttablemodel,我一直在尝试从Derby数据库获取数据,并填充由NetBeansGUI构建器创建的jTable 我有一个帐户类,其中保存以下代码: public static DefaultTableModel buildTableModel() throws SQLException { Vector<Vector<Object>> data = new Vector<Vector<Object>>(); Vector columns = new

我一直在尝试从Derby数据库获取数据,并填充由NetBeansGUI构建器创建的jTable

我有一个帐户类,其中保存以下代码:

public static DefaultTableModel buildTableModel() throws SQLException {
    Vector<Vector<Object>> data = new Vector<Vector<Object>>();
    Vector columns = new Vector();
    PreparedStatement ps = null;
    ResultSet rs = null;
    try {
        String stmt = "SELECT * FROM APP.DATAVAULT";
        ps = Main.getPreparedStatement(stmt);
        rs = ps.executeQuery();
        ResultSetMetaData metaData = rs.getMetaData();

        // names of columns
        Vector<String> columnNames = new Vector<String>();
        int columnCount = metaData.getColumnCount();
        for (int column = 1; column <= columnCount; column++) {
            columnNames.add(metaData.getColumnName(column));
        }
        // data of the table
        while (rs.next()) {
            Vector<Object> vector = new Vector<Object>();
            for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
                vector.add(rs.getObject(columnIndex));
            }
            data.add(vector);
        }
    } finally {
        try {
            ps.close();
        } catch (Exception e) {
        }
        try {
            rs.close();
        } catch (Exception e) {
        }
    }
    DefaultTableModel tableModel = new DefaultTableModel(data, columns);
    return tableModel;
}
建造商:

public SPPMainGUI() throws SQLException {
    initComponents();
    datavaultjTable.setModel(acc.buildTableModel());
}
我的主要方法是:

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                new SPPMainGUI().setVisible(true);
            } catch (SQLException ex) {
                Logger.getLogger(SPPMainGUI.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });
}
该代码设置为使用datavault表中的所有数据填充我的jTable,而不管登录的用户是谁

我的datavault表中有数据:

这就是我运行程序并成功登录时jTable的样子:

这是它应该看起来的样子,但是填充了:


我的代码哪里出错了?我已经被这个问题困扰了两周。

您需要将
列名添加到
列头数据中,否则
JTable中不会显示任何内容:

for (int column = 1; column <= columnCount; column++) {
   ...
}
columns.add(columnNames); <--- add this line

这个应该放在哪里?这个jTable是由GUI构建器创建的,所以我不确定是否应该在jTable的自定义代码部分中进行操作。@JohnVasiliou:这应该是显而易见的。不要让两个变量尝试做相同的事情,列和列名。只要一个。1+给莱默斯先生,你真了不起!我很高兴也很感激这终于奏效了。非常感谢你!1+至@JohnVasiliou了解详细问题并快速接受正确答案。1+了解详细问题。希望所有的问题都是这样的:)
for (int column = 1; column <= columnCount; column++) {
   ...
}
columns.add(columnNames); <--- add this line
DefaultTableModel tableModel = new DefaultTableModel(data, columnNames);