2017-12-02 20 views
0

私は、カーブランド、モデル、およびそれらが利用可能であるが、私は大きな問題を抱えています。私がテーブルに複数の車を入れると、新しい車がテーブルに印刷されますが、私が入力した以前の車も [Issue.png] [1]と転載します。最初はフェラーリエンツォに入り、テスラSに入りましたが、フェラーリエンツォは反復しています。java-jTableデータベースの反復値

車にデータベースを追加するのではなく、データベースを見ると[DatabasePic.png] [2]という2つしか表示されないためです。私は自分の車がJTableにどのように入っているのかという問題を知っています。私の方法は以下の通りです。..

ButtonClickEvent:

private void refreshbtnMouseClicked(java.awt.event.MouseEvent evt) {           
    try { 
     String Brand = brandlbl.getText(); 
     String Model = modellbl.getText(); 
     Boolean Available = false; 
     switch (availabilitybox.getSelectedItem().toString()) { 
      case "True": 
       Available = true; 
       break; 
      case "False": 
       Available = false; 
       break; 
     } 
     InsertApp nw = new InsertApp(); 
     nw.insert(Brand, Model, Available); 
     nw.refreshDatabase(jTable1); 
    } catch (SQLException ex) { 
     Logger.getLogger(Window.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

挿入方法:私は複数の車を入力すると

public void refreshDatabase(JTable table) throws SQLException { 
    Connection con = connect(); 
    String SQL = "SELECT * FROM CARDATA"; 
    Statement stmt = con.createStatement(); 
    ResultSet rs = stmt.executeQuery(SQL); 
    int col = rs.getMetaData().getColumnCount(); 
    System.out.println(col); 
    while (rs.next()) { 
     Object[] rows = new Object[col]; 
     for (int i = 1; i <= col; i++) { 
      rows[i - 1] = rs.getObject(i); 
     } 
     ((DefaultTableModel) table.getModel()).insertRow(rs.getRow() - 1, rows); 
    } 
    con.close(); 
    rs.close(); 
    stmt.close(); 
} 

答えて

1

public void insert(String brand, String model, Boolean available) { 
    String sql = "INSERT INTO CARDATA(brand,model,available) VALUES(?,?,?)"; 

    try (Connection conn = this.connect(); 
      PreparedStatement pstmt = conn.prepareStatement(sql)) { 

     pstmt.setString(1, brand); 
     pstmt.setString(2, model); 
     pstmt.setBoolean(3, available); 

     pstmt.executeUpdate(); 
    } catch (SQLException e) { 

     System.out.println(e.getMessage()); 
    } 

} 

は私のデータベースの更新新しい車はテーブルに印刷し、しかし私が入力した前の車

データを元に戻す前に、TableModelのデータをクリアする必要があります。 、

DefaultTableModel model = (DefaultTableModel)table.getModel(); 
model.setRowCount(0); 

while (rs.next()) 
{ 
    ... 

    model.addRow(...); 
} 

またはその代わりに、データベースからあなたが挿入を行うたびに、すべてのデータを取得するだけで、同時にテーブルにデータを追加します:

基本的なコードのようなものでなければなりません

pstmt.executeUpdate(); 
model.addRow(...); 
+0

これは私のために働いた、ありがとう。 –