2015-06-28 56 views
1

我開始學習如何使用數據庫,並試圖將數據從我的h2數據庫導出到JTable中。表中出現了正確的行數,但是,只有第一行填充了數據。其餘的是一個空白的網格。我爲JTable發佈了一些代碼。如果有人需要查看更多代碼,我會發布它。爲什麼JTable只顯示第一行數據?

public class Table extends JTable{ 

    public static int rows; 
    public static String[][] data; 
    public static String[] columns = {"Author", "Customer", "Date"}; 

    public static void populateTable() throws ClassNotFoundException, SQLException{ 

//Server is name of the database class 
     Server server = new Server(); 

     Statement stat = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);   
     ResultSet rs = stat.executeQuery("SELECT * FROM data"); 
     rs.last(); 
     rows = rs.getRow(); 
     rs.beforeFirst(); 

     data = new String[3][rows]; 

     while(rs.next()){ 
      int i = 0; 
      data[0][i] = rs.getString("Author"); 
      data[1][i] = rs.getString("Customer"); 
      data[2][i] = rs.getString("Date"); 
      System.out.println(rs.getString("Author")); 
      i = i++; 
     } 
     rs.close(); 
    } 
} 

class MyTableModel extends DefaultTableModel{ 

     String[] columnNames = {"Author", "Customer", "Date"}; 

     MyTableModel() throws ClassNotFoundException, SQLException{ 
      addColumn(columnNames[0]); 
      addColumn(columnNames[1]); 
      addColumn(columnNames[2]); 
     } 

     @Override 
     public int getRowCount() { 
      return rows; 
     } 

     @Override 
     public int getColumnCount() { 
      return 3; 
     } 

     @Override 
     public String getColumnName(int columnIndex) { 
      return columnNames[columnIndex]; 
     } 

     @Override 
     public boolean isCellEditable(int rowIndex, int columnIndex) { 
      return false; 
     } 

     @Override 
     public Object getValueAt(int rowIndex, int columnIndex) { 
       return data[columnIndex][rowIndex]; 

    } 

我也可以打印到控制檯的所有數據,但它不會顯示在JTable中。我一直堅持這個問題好幾個小時,但我不知道我做錯了什麼。在此先感謝

回答

3

這段話是因爲i無操作被賦予它遞增

i = i++; 

之前只使用

i++; 

而且進入循環前初始化i

+0

這麼簡單的事情。 – mike413

+0

另外你的數組索引出現錯誤的方式 - 你不想爲每行賦值 - 'data [i] [0] = rs.getString(「Author」);'等等? – Reimeus

2

你應該使用for循環或在循環之外聲明我。按照現狀,您將所有數據都設置爲0行(int i = 0)。

while(rs.next()){ 
      int i = 0; // this will run for every row 
      data[0][i] = rs.getString("Author"); 
      data[1][i] = rs.getString("Customer"); 
      data[2][i] = rs.getString("Date"); 
      System.out.println(rs.getString("Author")); 
      i = i++; 
     }