当前位置: 首页 > 知识库问答 >
问题:

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

唐信瑞
2023-03-14

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

此外,当我尝试删除最后一行时,我会遇到以下异常:

线程“AWT-EventQueue-0”中出现异常Java . lang . arrayindexoutofboundsexception: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));    
}

下面是我从DB(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;
}

你知道问题出在哪里吗?

共有1个答案

郑锦
2023-03-14

当我尝试删除最后一行时,会出现以下异常:

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 );
 类似资料:
  • 我制作了一个JTable,其中填充了数据库中的数据。它从textfields中获取数据并将其添加到表和数据库中。问题是我有一个删除按钮,我让它从表本身删除选定的行(使用defaultTableModel),但它不会从实际的数据库中删除该数据。当我再次运行该程序时,删除的行再次出现在JTable中。 这可能会变得混乱,但希望有人能找出我错过了什么。帮助将会很感激,但不要,我的时间很少,不能完全大修我

  • 我的Jtable有一个listSelectionListener: 我创建了一个按钮来删除带有事件的Jtable的所有行: 如果我在没有选择任何行的情况下按下按钮,则不会出现错误,但当我选择一行,然后按下按钮时,会出现以下错误: 当表没有ListSseltionListener时,不会发生这种情况。我哪里错了? 提前感谢您的帮助。

  • 我想从java中的表中删除选定的行。该事件应在单击按钮时执行。如果有人帮助我,我会非常感激。。。 例如,有一个名为sub\U table的表,有3列,即sub\U id、sub\U name、class。当我从该表中选择一行并单击“删除”按钮时,应删除该特定行。。

  • 我不确定是什么导致了这个例外。

  • 我需要从ListView中永久删除一个项目,然后从数据库中删除。我有一个DatabaseHandler.java类,它的delete函数为: 注意,函数deleteContact具有contact类型的contact变量。

  • 下面的代码是我的按钮操作的一部分。Jtable contain last row is复选框。单击“保存”按钮时,所选行必须从表行中删除 执行的操作代码