java - 使用 JTable 和列按钮从数据库中删除正确的行时出现问题

标签 java mysql swing jtable

我正在使用 JTable 和 MySQL 数据库编写代码,并将数据库中的表加载到 JTable 中。我还制作了按钮列,该按钮删除它所在的行。按下后该行消失,但在数据库中删除了错误的行。

此外,当我尝试删除最后一行时,我收到此异常:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 8 >= 8.

这是 ActionListener 方法:

jButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            int row = table.convertRowIndexToModel(table.getEditingRow());
            model.removeRow(row);
            System.out.print(row);
            deleteOrder.removeFromDB(table.getModel().getValueAt(row, 0).toString());//table.getValueAt(row, column).toString());//?????????
            fireEditingStopped();
        }       
}); 

这是其他类的方法,这里我将值加载到 JTable

private static void loadOrdersTable() throws SQLException {
    String[][]data = new String[takeOrder.countOrder()][5];
    String[] columnNames = {"Order ID", "Table ID","Name","Price","Delete Button"};
    data = takeOrder.getOrder();
    DefaultTableModel model = new DefaultTableModel(data, columnNames);
    table = new JTable( model );
    table.getColumnModel().getColumn(4).setCellRenderer(new ButtonTableRenderer());
    table.getColumnModel().getColumn(4).setCellEditor(new ButtonTableEditor(new JTextField(),table, model));    
}

这是我从数据库(TakeOrder 类)中选择值的方法:

public String[][] getOrder() throws SQLException {
    int i = 0;
    String data[][] = new String[countOrder()][5];
    String query = "SELECT order_id, table_id, dish_name, dish_price FROM orders";

    try {
        statement = makeConnection.getConnection().createStatement();
        resultSet = statement.executeQuery(query);
        while(resultSet.next()) {
             String orderId = resultSet.getString(1);
             String restTableId = resultSet.getString(2);
             String name = resultSet.getString(3);
             int price = resultSet.getInt(4);
             data[i][0] = orderId;
             data[i][1] = restTableId;
             data[i][2] = name;
             data[i][3] = String.valueOf(price);
             data[i][4] = "Delete";
             i++;
        }
        System.out.print("Ilość: " + i);
    } catch(Exception e) {
        System.out.print("getOrder(String tableId) error " + e.getMessage());
    }

    return data;
}

你知道问题出在哪里吗?

最佳答案

when I try to remove last row I get this exception:

int row = table.convertRowIndexToModel(table.getEditingRow());
model.removeRow(row);
System.out.print(row);
deleteOrder.removeFromDB(table.getModel().getValueAt(row, 0).toString());

是的,您已经从 TableModel 中删除了最后一行。

因此您无法使用 getValueAt(...) 方法再次访问该行。

你需要重新安排你的逻辑。像这样的东西:

String valueFromTable = model.getValueAt(row, 0).toString();
model.removeRow(row);
deleteOrder.removeFromDB( valueFromTable );

关于java - 使用 JTable 和列按钮从数据库中删除正确的行时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57947560/

相关文章:

java - 如何生成具有泊松分布的离散随机事件?

java - MDP JMS 事务回滚然后在无限循环中重新处理消息

mysql - 基于星期几列透视 MySQL 表

java - Swing:keyListener 代码为 "unknown"

java - 从 Java JHotDraw 中重写的 getActions 在上下文菜单中创建子菜单

java - 即使应用程序关闭,如何设置在特定时间段在Android应用程序中弹出通知?

java - ajaxswing - 未定义 JAVA_HOME 环境变量

php - MySQL 删除/合并相似的行

ubuntu - 从不同的安装访问 mysql 数据库

java - 如何从另一个面板更改卡片布局面板?