2013-03-02 123 views
3

我一直试图从我的Derby数据库获取数据并填充由Netbeans GUI构建器创建的jTable。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; 
} 

正如你可以看到它返回与两个参数,数据和列一个DefaultTableModel。

然后,我的GUI类中,我有以下:

我场:

Account acc = new Account(); 

构造:

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); 
      } 
     } 
    }); 
} 

的代码设置为populat Ë我的JTable从datavault表中的所有数据,无论记录哪些用户在

我有我datavault表中的数据:

enter image description here

而这正是我的JTable的样子时,我运行我的程序,并成功登录:

enter image description here

这是它应该是什么样子,但人口:

enter image description here

我在哪里错了我的代码?我已经为此停留了2周。

+2

+1的详细问题。希望所有的问题都是这个框架:) – Reimeus 2013-03-02 15:05:07

回答

2

您需要添加columnNamescolumns头数据,否则什么也不会出现在你的JTable

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

不是有这个数据冗余变量,你可以简单地使用columnNames为你的模型,而不是:

DefaultTableModel tableModel = new DefaultTableModel(data, columnNames); 
+0

这应该去哪里?这个jTable是由GUI构建器创建的,所以我不确定我是否应该在jTable的自定义代码部分内做些什么。 – 2013-03-02 14:56:45

+1

@JohnVasiliou:应该很明显。没有两个变量试图做同样的事情,列和columnNames。只有一个。 1+给雷梅斯。 – 2013-03-02 15:00:04

+0

@HovercraftFullOfEels好点,更新:) – Reimeus 2013-03-02 15:02:44

相关问题