2013-03-02 2 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를을 반환 볼 수 있듯이.

내 필드 :

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

그런 다음 내 GUI 클래스에서 나는 다음이 코드가 populat로 설정되었습니다. datavault 테이블의 모든 데이터를 전자 내 JTable의, 상관없이 사용자가 로그인하지

내 datavault 테이블의 데이터가 있습니다.

enter image description here

그리고 이것은 내 JTable가이 때의 모습입니다 I 내 프로그램을 실행하고 성공적으로 로그인 :

enter image description here

이 그것을 어떻게 보일지이지만, 인구 :

enter image description here

어디에서 코드가 잘못 되나요? 나는 2 주 동안 이것에 난처 해했다.

+2

+1 세부 질문입니다. 모든 질문이 잘 짜여진 것을 기원합니다. – Reimeus

답변

2

당신은, 그렇지 않으면 아무것도 당신의 JTable 표시되지 않습니다, 당신의 columnNames 당신의 columns 헤더 데이터에 추가해야합니다

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

이 데이터에 대한 중복 변수가보다는, 당신은 단순히 대신 모델 columnNames을 사용할 수 있습니다 :

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

어디로 가야합니까? 이 jTable은 GUI 빌더에 의해 만들어지고 있으므로 jTable의 사용자 정의 코드 부분 내에서 작업해야하는지 잘 모르겠습니다. –

+1

@ JohnVasiliou : 분명해야합니다. column, columnNames 같은 것을하려고하는 두 개의 변수를 가지지 마십시오. 그냥 가지고있어. Reimeus에 1+. –

+0

@HovercraftFullOfEels 좋은 지적, 업데이트 됨 :) – Reimeus