2017-04-03 4 views
0

Ich bin neu in Java und DBMS. Ich versuche, die JTable nach Änderungen in der H2-Datenbank zu aktualisieren/aktualisieren, wenn der Benutzer auf dieselbe Schaltfläche klickt, um JTable anzuzeigen und nachdem Daten in die Datenbank geschrieben wurden (wenn auf die Schaltfläche "Write" geklickt wird). Ich habe einige Methoden ausprobiert und einige Posts gelesen, konnte aber nichts Wichtiges für mein Programm finden. Der folgende Code veranschaulicht mein Problem.JAVA: Wie aktualisiere/aktualisiere Tabelle nach Änderungen in der Datenbank

Dies ist die Methode verwendet, aus der Datenbank zu lesen und zeigen Sie es auf 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(); 
    } 

Und das ist die Methode, die ich Daten in die Datenbank

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

und was ist Ihr Problem, haben Sie einen Fehler bekommen? –

Antwort

0

Diese Frage zu schreiben, bin mit hat wurde beantwortet here

aber es kommt darauf an, Ihr JTable-Objekt zu löschen und neu zu rendern. d. h. erfrischen, der Beitrag oben erklärt es sehr schön.

Hoffe, Sie bekommen es richtig.

Verwandte Themen