2017-04-30 4 views
0

in diesem Code möge es einfach löschen Reihe von JTable und i von DB löschen und bei der Ausführung dieses aus JTable und apper Fehlern löschen: java.lang.ArrayIndexOutOfBoundsException: 2 >= 2 aber nicht von DB löschen, wie diese zu lösen?Wie lösche ich die ausgewählte Zeile von DB und JTable?

private final JPanel panel_09 = new JPanel(); 
    JScrollPane scrollPane_09 = new JScrollPane(); 
    final DefaultTableModel TableModel09 = new DefaultTableModel(new String[]{"Picture", "Item", "Price", "After Discount"}, 0); 
    final JTable table_09 = new JTable(TableModel09); 
    JButton btnNewButton_09 = new JButton("Delete Item"); 

    btnNewButton_09.addActionListener (new ActionListener() { 


    public void actionPerformed(ActionEvent arg0) { 
     try { 
      int selectedPlanet = table_09.getSelectedRow(); 
      TableModel09.removeRow((int) selectedPlanet); 
      Object desc = table_09.getModel().getValueAt(selectedPlanet, 4); 
      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/login", "root", "123"); 
      String query = "delete from flyer_item where discount=desc"; 
      java.sql.PreparedStatement ps = conn.prepareStatement(query); 
      ps.setString(1, (String) desc); 
      ps.executeUpdate(); 

     } catch (Exception ex) { 
      System.err.println(ex); 
     } 

    } 
} 
); 
+0

haben Sie versuchen, Ihr Problem zu debuggen? –

+1

Wenn die Antwort von @ YCF_L Ihre Frage beantwortet, dann akzeptieren Sie bitte die Antwort. Bitte lesen Sie [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Http://stackoverflow.com/help/someone-answers) für mehr darüber. –

Antwort

2

Sie entfernt Ihr Objekt aus dem Modell, bevor Sie die desc erhalten:

int selectedPlanet = table_09.getSelectedRow();//<<--this will equal 2 

TableModel09.removeRow((int) selectedPlanet);//<<----remove 2 

So, jetzt

Object desc = table_09.getModel().getValueAt(selectedPlanet, 4); 
//when you try to `getValueAt(2,4)` you get this error 
//"java.lang.ArrayIndexOutOfBoundsException: 2 >= 2" 

dieses Problem zu vermeiden, müssen Sie Ihr Objekt tp erhalten, bevor Sie entfernen die Reihe:

int selectedPlanet = table_09.getSelectedRow(); 
Object desc = table_09.getModel().getValueAt(selectedPlanet, 4); 
TableModel09.removeRow((int) selectedPlanet); 

Dann werden Sie einen anderen Fehler von SQL erhalten, weil Parameter einstellen PreparedStatement- Sie verwenden haben ?:

String query="delete from flyer_item where discount = ?"; 
//----------------------------------------------------^ 
java.sql.PreparedStatement ps = conn.prepareStatement(query); 
ps.setString(1,(String) desc); 
Verwandte Themen