2011-11-27 26 views
2

我有一個JTable,我populte表如下:JTable中不顯示新插入的行/數據

jTable_Std_info.setModel(DBControler.getALLStudents()); 

而下面是在一個名爲DBControler類的靜態方法來檢索所有數據來自數據庫(Oracle)。

public static DefaultTableModel getALLStudents() throws SQLException, Exception { 

    DefaultTableModel tableModel = new DefaultTableModel(); 
    Vector rows = new Vector(); 
    Vector columns = new Vector(); 

    try { 
     conn = geConnection(); 
     cst = conn.prepareCall("{? = call std_getInfoFunc}"); 
     cst.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); 
     cst.execute(); 
     res = (ResultSet) cst.getObject(1); 
     System.out.print(res); 
     ResultSetMetaData rsm = res.getMetaData(); 

     for (int i = 1; i <= rsm.getColumnCount(); i++) { 
      columns.addElement(rsm.getColumnName(i)); 
     } 

     int row = 0; 
     while (res.next()) { 
      Vector vRow = new Vector(); //to store the current row 
      //System.out.println("Row " +row+"\n"); 
      for (int i = 1; i <= rsm.getColumnCount(); i++) { 
       String columnValue = res.getString(i); 
       vRow.addElement(columnValue); 
      } 
      row += 1; 
      rows.addElement(vRow); 
     } 
     tableModel.setDataVector(rows, columns); 

    } catch (SQLException e) { 
     e.printStackTrace(); 
    } finally { 
     res.close(); 
     conn.close(); 
    } 
    return tableModel; 
} 

到目前爲止,一切工作正常,但問題是,如果我在數據庫中插入新記錄時,JTable沒有得到新插入的行/數據。爲什麼是這樣以及如何解決這個問題?

更新: 它提交我的新插入時檢索數據。那麼每次更新時都必須提交?或者還有其他方法可以做到這一點嗎?

+1

兩個或三個similair API根據到你的實現中,每當你在數據庫中添加一行時,你都需要創建一個新的表模型。在數據庫中添加一行後,您是否再次調用'getALLStudents()'? –

+0

我是java中的初學者,所以我不瞭解Java中的很多功能。有沒有其他方法可以更新行而不是創建新的表格模型? – Sas

回答

3

我認爲你尋找的Oracle內置Database Change Notification,不知道是否是入店對甲骨文在免費版本中,如果沒有,那麼沒關係,針對MySQL的存在對Java JDBC

3

但問題是,如果我在數據庫中插入新記錄,JTable不會獲取新插入的行/數據。這是爲什麼?

TableModel不知道數據庫何時更新。

我該如何解決這個問題?

如果您的應用程序正在將該行添加到數據庫中,那麼它還需要同時向TableModel添加一行。

+0

我是初學者,對不起,如果我的猜測是錯誤的。在我的代碼中,我使用了「while(res.next())」循環。所以程序會檢查並添加行,直到沒有更多的行。如果它是正確的,那麼它自動添加新行也不是嗎? – Sas

+1

這將工作,但這意味着您需要重新創建TableModel並在每次添加單行時從數據庫讀取所有數據。 – camickr

+0

重新創建TableModel會影響應用程序的性能嗎?即使我重新創建表模型,它也不會獲取新創建的行。它假設獲取新創建的行,但它不檢索它。 – Sas