2013-02-28 4 views
1

이렇게하면 데이터베이스에서 데이터를 가져 와서 DefaultTableModel로 저장하고 해당 모델을 GUI로 전달하여 데이터베이스 데이터로 jTable을 채 웁니다. 보고되지 않은 예외 SQLException; 잡히거나 던져 져야 함 오류

내 계정 클래스 내에서 방법 :

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

그런 다음 내 GUI 내에서 내가 필드

로 다음과 같은 코드가
Account acc = new Account(); 
DefaultTableModel dTableModel = acc.buildTableModel(); 

마지막으로, 내 GUI 생성자에서, 내가 설정하고 내 datavault 모델에서 모델 jTable 데이터베이스에서 가져 왔어요

public SPPMainGUI() { 
    initComponents(); 
    datavaultjTable.setModel(dTableModel); 
} 

내가 봤어 putti 줄 주위에 try-catch 블록이 있습니다.

DefaultTableModel dTableModel = acc.buildTableModel();

하지만 여전히 오류가 있습니다. 내 옵션은 무엇입니까? 나는 호출되는 내 메서드가 SQLException을 throw하지만, 왜 SQLException을 잡을 때 공을 재생하고 싶지 않은지 이해합니다.

편집 : 오류 : enter image description here

+0

동일한 오류가 계속 발생합니까? 아니면 'dTableModel을 변수로 해석 할 수 없습니다'라는 오류가 변경 되었습니까? – Perception

+0

항상 동일하게 보입니다 - 더 명확히하기 위해 오류 이미지를 추가했습니다. 나는이 문제를 해결하면 위에 적어 놓은 것과 같은 또 다른 오류가 발생할 수 있다고 생각합니다. 왜냐하면이 코드를 스윙하고 작동하는지 확실하지 않기 때문입니다. –

+1

음, 특정 코드는 현재 예외를 처리하지 않습니다. 이것을 시도하십시오 -'DefaultTableModel dTableModel = null; 시도 {dTableModel = acc.buildTableModel(); } catch (SQLException sqle) {// 핸들 오류}'. – Perception

답변

0

가 나는 것 같았다 수행하여 그것을 해결하도록하려면 다음

Account acc = new Account(); 
DefaultTableModel dTableModel; 

생성자를 다음과 같이

내 GUI 내에서

, 내 필드는 다음과 같이 표시됩니다 :

public SPPMainGUI() throws SQLException { 
    this.dTableModel = Account.buildTableModel(); 
    initComponents(); 
    datavaultjTable.setModel(dTableModel); 
} 
내 GUI 내에서 0

내 주요 방법은 지금과 같이 보입니다 :이 정확하지만 더 이상 오류가없는 경우

public static void main(String args[]) { 
/* Create and display the form */ 
    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); 
      } 
     } 
    }); 
} 

는 잘 모르겠어요. 내 jTable에 데이터가 표시되지 않습니다 ... 아직. 왜 그런지는 잘 모르겠지만이 문제가 해결되었다고 생각합니다. 다음 문제로 넘어갑니다. 도와 주신 모든 분들께 감사드립니다.

+1

나는 달려있다. 오류 처리는 변덕스러운 일입니다. 앱의 라이프 사이클에서'buildTableModel'을 한 번 이상 호출 할 가능성이 있습니까? 그렇다면 초기 단계에서 오류를 처리하는 것이 좋습니다.이 메서드를 한 번만 호출하면 응용 프로그램에서 중요한 것으로 보입니다 (처리되는 것처럼). 나는 아마도 "JOptionPane"을 사용하여 뭔가 잘못되었다는 것을 사용자에게 보여주고, "응용 프로그램은 어디로 갔습니까?" – MadProgrammer