2015-06-28 52 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++; 
     }