2013-02-28 138 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 ng圍繞該行的try-catch塊

DefaultTableModel dTableModel = acc.buildTableModel();

但是錯誤依然存在。我在這裏有什麼選擇?我明白我所調用的方法會拋出一個SQLException,但是爲什麼當我捕捉到一個SQLException時,它不想玩球?

編輯: 錯誤: enter image description here

+0

你確定它仍然存在相同的錯誤嗎?或者錯誤更改爲'dTableModel無法解析爲變量'? – Perception 2013-02-28 20:29:28

+0

它似乎總是相同的 - 我添加了一個錯誤的圖像進一步澄清。我覺得如果我解決了這個問題,我可能會得到另一個錯誤,就像你上面提到的那樣,因爲我有點搖擺這個代碼,不確定它是否會起作用。 – 2013-02-28 20:31:48

+1

那麼,那個特定的代碼目前沒有處理異常。試試這個 - 'DefaultTableModel dTableModel = null;嘗試{dTableModel = acc.buildTableModel(); } catch(SQLException sqle){//處理錯誤}'。 – Perception 2013-02-28 20:34:09

回答

0

我似乎已經這樣做解決了下列文件:

我的GUI內,我的字段說明如下:

Account acc = new Account(); 
DefaultTableModel dTableModel; 

構造現在顯示爲:

public SPPMainGUI() throws SQLException { 
    this.dTableModel = Account.buildTableModel(); 
    initComponents(); 
    datavaultjTable.setModel(dTableModel); 
} 

我的我的GUI中Main方法現在看起來像這樣:

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 2013-02-28 22:09:57

相關問題