【问题标题】:how to delete selected row from DB and JTable?如何从 DB 和 JTable 中删除选定的行?
【发布时间】:2017-09-28 09:25:42
【问题描述】:

在这段代码中,它只是从JTable 中删除行,我想从数据库中删除 当运行它时,它会从JTable 中删除并出现错误: java.lang.ArrayIndexOutOfBoundsException: 2 >= 2 但没有从数据库中删除如何解决这个问题?

    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);
        }

    }
}
);

【问题讨论】:

标签: java mysql arrays swing jdbc


【解决方案1】:

在获得 desc 之前,您从模型中删除了对象:

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

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

那么现在

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

为避免此问题,您必须在删除行之前获取您的对象:

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

然后,你会得到另一个 SQL 错误,因为要将参数设置为 PreparedStatement,你必须使用?

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

【讨论】:

    猜你喜欢
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2011-12-22
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多