2017-04-03 118 views
0

我是新來的java和DBMS。當用戶單擊相同的按鈕以顯示JTable並將數據寫入數據庫(單擊寫入按鈕時)後,我試圖更新/刷新JTable。我嘗試了一些方法並閱讀了一些帖子,但找不到對我的程序至關重要的任何內容。下面的代碼說明了我的問題。JAVA:如何更改/刷新表後更改爲數據庫

這是用於從數據庫中讀取,並顯示在JTable中

public void readActiveData() throws IOException, InstantiationException, IllegalAccessException, SQLException {  

    try { 
     st = conn.createStatement(); 
    } catch (SQLException sqlex) { 
     JOptionPane.showMessageDialog(null, "Can't connect to DB. " + sqlex); 
     dispose(); 
    } 

    try { 
     rs = st.executeQuery("SELECT * FROM main_data WHERE expirationDate > NOW() + 1;"); 
     rs.beforeFirst(); 

     while (rs.next()) { 
      int id = rs.getInt(1); 
      String ovogNer = rs.getString(2); 
      String regNum = rs.getString(3); 
      String itemName = rs.getString(4); 
      String note = rs.getString(5); 
      int zHemjee = rs.getInt(6); 
      int hvv = rs.getInt(7); 
      int hugatsaa = rs.getInt(8); 
      today = rs.getDate(9); 
      int totalPay = rs.getInt(10); 
      expirationDate = rs.getDate(11); 
      rows++; 
     } 
     regData = new Object[rows][11]; 

     Object[] Colheads = {"Бүртгэлийн дугаар", "Овог нэр", "Регистрийн дугаар", "Барьцаа", 
      "Тэмдэглэл", "Зээлийн хэмжээ", "Хүү (%)", "Хугацаа", "Огноо", "Нийт төлөх", "Дуусах хугацаа"}; 

     rs = st.executeQuery("SELECT * FROM main_data WHERE expirationDate > NOW() + 1;"); 

     for (int i1 = 0; i1 < rows; i1++) { 
      rs.next(); 

      for (int j1 = 0; j1 < 11; j1++) { 
       regData[i1][j1] = rs.getString(j1 + 1); 
      } 
     } 
     model = new DefaultTableModel(regData, Colheads); 
     table = new JTable(model); 
     int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED; 
     int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED; 
     JScrollPane jsp = new JScrollPane(table, v, h); 
     activeDataPanel.add(jsp); 
     rs.close(); 
     st.close(); 
     conn.close(); 
    } 

方法這是我使用將數據寫入到數據庫

public void writeDataIntoDB() throws InstantiationException, IllegalAccessException { 

    ResultSet rs = null; 
    Connection conn = null; 
    Statement st = null; 
    PreparedStatement pst = null; 

    final String URL = "jdbc:h2:~/registDB"; 
    final String USER = "admin"; 
    final String PASS = "password"; 
    LocalDate currentDate = LocalDate.now(); 
    String input = hugatsaaFld.getText(); 
    long addDays = Long.parseLong(input); 
    expiration = currentDate.plusDays(addDays); 
    expirationDate = java.sql.Date.valueOf(expiration); 

    try { 

     Class.forName("org.h2.Driver").newInstance(); 

     conn = DriverManager.getConnection(URL, USER, PASS); 

     String sql = "INSERT INTO main_data(ovogNer,regNum,itemName,note,zHemjee,hvv,hugatsaa,date,totalPay,expirationDate)" 
       + "VALUES" 
       + "(?,?,?,?,?,?,?,?,?,?)"; 
     pst = conn.prepareStatement(sql); 
     pst.setString(1, getOvogNer()); 
     pst.setString(2, getRegNum()); 
     pst.setString(3, getItemName()); 
     pst.setString(4, getNote()); 
     pst.setInt(5, +getzHemjee()); 
     pst.setInt(6, +getHvv()); 
     pst.setLong(7, +getHugatsaa()); 
     pst.setDate(8, java.sql.Date.valueOf(LocalDate.now())); 
     pst.setDouble(9, getTotalPay()); 
     pst.setDate(10, expirationDate); 
     pst.executeUpdate(); 
     pst.close(); 
     conn.close(); 
    } catch (SQLException se) { 
     JOptionPane.showMessageDialog(null, "Error: " + se); 
    } catch (ClassNotFoundException ex) { 
     ex.printStackTrace(); 
    } 
} 
+0

和你的問題是什麼,你有什麼錯誤? –

回答

0

這個問題有方法已被回答here

但它歸結爲清除和重新渲染您的JTable對象。即刷新,上面的帖子很好地解釋了它。

希望你得到它的權利。

相關問題