2015-06-28 5 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

You должен либо использовать цикл for, либо объявлять i за пределами вашего цикла. Как бы то ни было, вы устанавливаете все данные в строку 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++; 
     } 
Смежные вопросы