2013-07-28 4 views
-3

У меня есть JTable, которые имеют простую структуру, я хочу заполнить ее данными базы данных.Простые данные базы данных шоу в JTable

Я пишу этот код, но теперь не знаю, как продолжить!

+0

В чем проблема, с которой вы сталкиваетесь? Как я вижу, вы никогда не изменяете свои массивы данных [] [] и cols [], и они являются нулями, поэтому вы либо получаете какое-то исключение, либо ваша таблица пуста. – nkukhar

+0

У вас есть какие-либо проблемы или вы просто хотите узнать, как использовать JTable? Если последнее верно, в Интернете есть много учебников, за которыми вы можете следовать. –

+1

Возможно, вы захотите посмотреть http://docs.oracle.com/javase/tutorial/jdbc/basics/jdbcswing.html –

ответ

4

Простые данные показывают базы данных в JTable

Там нет необходимости создавать пользовательские TableModel.

См. Код Table From Database Example в Table From Database для простого способа загрузки данных в модель DefaultTableModel и отображения модели в JTable.

+0

Мне нужно создайте пользовательский TableMode, например. Я думаю, что моя основная проблема заключается в отправке данных в массив или вектор, а затем создание таблицы. – Sajad

+0

camickr - эксперт по Swing. Когда он говорит вам, что DefaultTableModel достаточно, вы должны слушать и попробовать. – duffymo

3

Тот, кто настолько глуп, чтобы включать пустой блок поймать обязательно бороться:

} catch (SQLException ex) { 
    } 

Это очень плохая идея. Вы должны регистрировать или печатать трассировку стека минимум или добавить предложение throws в подпись метода и обрабатывать ее в другом месте.

Ваш стиль кода также плохой. Вопросы читаемости. Разработайте единый последовательный стиль и придерживайтесь его.

3

Это исключение происходит из-за переменной cols, которая нигде не инициализировалась.

, поэтому вы должны инициализировать все поля в конструкторе TableModels или вне таблицыModel.

ну, тогда вы не должны использовать метаданные или любую другую базу данных в основных методах TableModels.

только в конструкторе или на стороне столаModel.

такой. попробуйте:

class d9tableModel extends AbstractTableModel { 

Connection con; 
Statement statement; 
ResultSetMetaData metadata; 
ResultSet resultSet; 
String dbName = "mydb"; 
String bdUser = "root"; 
String dbPassword = "2323"; 
String dbUrl = "jdbc:mysql://localhost/mydb"; 
String query = "select * from mytable"; 
ArrayList<String> cols = new ArrayList<>(); 
ArrayList<ArrayList<String>> data = new ArrayList<>(); 

public d9tableModel() { 

    try { 
     con = DriverManager.getConnection(dbUrl, bdUser, dbPassword); 
     System.out.println("Connected to database successfully!"); 
     statement = con.createStatement(); 
     resultSet = statement.executeQuery(query); 

     int c = resultSet.getMetaData().getColumnCount(); 
     for (int i = 0; i < c; i++) { 
      cols.add(resultSet.getMetaData().getColumnName(i)); 
     } 

     while (resultSet.next()) { 
      ArrayList<String> row = new ArrayList<>(); 
      for (int i = 0; i < c; i++) { 
       row.add(resultSet.getString(i)); 
      } 
      data.add(row); 
     } 
    } catch (SQLException ex) { 
     System.out.println("Could not connect to database"); 
    } finally { 
     try { 
      if (statement != null) { 
       statement.close(); 
      } 
      if (con != null) { 
       con.close(); 
      } 
     } catch (SQLException ex) { 
      Logger.getLogger(d9tableModel.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

@Override 
public int getRowCount() { 
    return data.size(); 
} 

@Override 
public int getColumnCount() { 
    return cols.size(); 
} 

@Override 
public Object getValueAt(int rowIndex, int columnIndex) { 
    ArrayList<String> row = data.get(rowIndex); 
    return row.get(columnIndex); 
} 

@Override 
public String getColumnName(int column) { 
    return cols.get(column); 
}} 

Эта таблица модели точно отображает таблицу базы данных в вашем JTable.

извините за плохой английский язык каждое тело.

удачи.

+0

@kleopatra Я запустил этот код, и был показан только первый столбец! после добавления циклов 'i <= c', проблема решена! – Sajad

+0

@kleopatra Я не знаю, что не должен редактировать какой-либо ответ, спасибо ... – Sajad

+0

@ Саяд, вы правильно заметили ошибку, основная проблема заключалась в том, что вы исправили ее не полностью: корректируя только верхнюю границу, а не нижнюю: -) Омид, индекс в наборе результатов основан на 1, а не на 0, вам нужно отредактировать и исправить цикл соответствующим образом. – kleopatra