当前位置: 首页 > 面试题库 >

如何一次从JTable删除数据库中的多行

何高旻
2023-03-14
问题内容

我想一次从JTable删除几行,但一次只能删除一行。JTable一次只能允许一个选择吗?如果我想通过选择删除多行,java是否允许我们这样做?给定的代码一次只能删除一行,即使我选择了多行也是如此。

DBConnection 是连接到MySql数据库的类。

staffTable1 是变量的名称 JTable

ShowStaffInStaffTable()JTable通过使用Getter Setter类从MySql导入数据来更新我的行和列的函数

这是我尝试过的代码:

int row = staffTable1.getSelectedRow();
DefaultTableModel model = (DefaultTableModel) staffTable1.getModel();

String selected = model.getValueAt(row, 9).toString();

if (row >= 0) {
    try {
        DBConnection DB12 = new DBConnection();
        Connection conn = DB12.Connect();
        String sql = "delete from staff where Contact_No= ?";
        PreparedStatement stmt = conn.prepareStatement(sql);
        stmt.setString(1, selected);
        stmt.executeUpdate();
        form12.ShowStaffInStaffTable();
    } catch (Exception w) {
        JOptionPane.showMessageDialog(this, "Connection Error!"+w);
        w.printStackTrace();
    }
}

问题答案:

下面显示了如何从JTable(和JList)中删除多个选定的行:

import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.*;
import javax.swing.table.*;

public class ItemDeletion extends JPanel
{
    private JList<String> list;
    private JTable table;

    public ItemDeletion()
    {
        setLayout( new BorderLayout(5, 5) );

        String[] items =
        {
            "One",
            "Two",
            "Three",
            "Four",
            "Five",
            "Six",
            "Seven",
            "Eight",
            "Nine",
            "Ten"
        };

        //  Add the list

        DefaultListModel<String> listModel = new DefaultListModel<String>();

        for (String item: items)
            listModel.addElement( item );

        list = new JList<String>( listModel );


        JButton listDelete = new JButton( "Delete From List" );
        listDelete.addActionListener( new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                DefaultListModel model = (DefaultListModel)list.getModel();
                int row = list.getSelectedIndex();

                while (row != -1)
                {
                    model.removeElementAt( row );
                    row = list.getSelectedIndex();
                }
            }
        });

        JPanel listPanel = new JPanel( new BorderLayout(5, 5) );
        listPanel.add(new JScrollPane( list ), BorderLayout.CENTER);
        listPanel.add(listDelete, BorderLayout.PAGE_END);

        //  Add the table

        DefaultTableModel tableModel = new DefaultTableModel(0, 1);
        List<String> tableItems = Arrays.asList( items );
        Collections.shuffle( tableItems );

        for (String item: tableItems)
        {
            System.out.println( item );
            tableModel.addRow( new String[]{item} );
        }

        table = new JTable( tableModel );

        table.setAutoCreateRowSorter(true);
        ((DefaultRowSorter)table.getRowSorter()).toggleSortOrder(0);

        JButton tableDelete = new JButton( "Delete From Table" );
        tableDelete.addActionListener( new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                DefaultTableModel model = (DefaultTableModel)table.getModel();
                int row = table.getSelectedRow();

                while (row != -1)
                {
                    int modelRow = table.convertRowIndexToModel( row );
                    model.removeRow( modelRow );
                    row = table.getSelectedRow();
                }
            }
        });

        JPanel tablePanel = new JPanel( new BorderLayout(5, 5) );
        tablePanel.add(new JScrollPane( table ), BorderLayout.CENTER);
        tablePanel.add(tableDelete, BorderLayout.PAGE_END);

        add(listPanel, BorderLayout.LINE_START);
        add(tablePanel, BorderLayout.LINE_END);
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("Multiple Item Deletion");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new ItemDeletion(), BorderLayout.NORTH);
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}

显然,您将需要修改代码以从数据库中删除该行。



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

  • 我不小心运行了这个变更集,但是我想对这个变更集做一些修改。这仍然处于开发模式,所以我不想添加另一个变更集来恢复这些更改。我计划通过直接在数据库中执行sql查询从表中删除PAYLOAD_SIZE列。之后,我想通过做一些修改再次运行变更集。 从liquibase文档中,我了解到liquibase在表DATABASECHANGELOG中为成功执行的变更集创建了一个条目。因此,我计划从表DATABASEC

  • 我遵循了从表从数据库显示JTable的方法,但我不知道如何从JTable中插入、更新和删除一行,并在数据库中更新,然后刷新JTable以从新更新的数据库中显示。 我想添加一个“添加项”按钮,然后它会弹出一个框架/窗口,其中有字段要输入,然后在弹出的框架中单击“添加”后,JTable和数据库将同时更新。 有人能帮我做这件事吗?我迷路了..非常感谢!

  • 我开始使用一个代码,使用Firebase实时数据库。我将它实现到我的解决方案中。连接和控制非常完美,所以我将其用于生产环境。 一段时间后,我在升级,我需要再次删除所有数据-但请稍候,控制台中最高根级别不再有删除按钮,并且一次只允许在一个选定项目中: 上次更新仅显示此消息,没有后续步骤: 只读 问:如何一次删除所有数据?

  • 我有2列的jtable,然后我想把它的值插入数据库; 我知道这可以用像.. 问题是..getRowCount不知道该行是否为空,那么在数据库中,该空值仍将被插入(它将在数据库中生成我的自动增量值) 我的问题是如何从jtable中插入数据库,但是空行不会插入? 如果我要求太多,请给我一个处理空行的线索, 原谅我的英语 下面是向数据库中添加数据的坏方法