希望实现用户输入一个对应的“会员ID”以后删除两个表中具有相同“会员ID”的行,但是无论我输入什么ID两个表数据都会被清空(相关搜索:存储过程|sql语句)

我创建了两个表和一个存储过程,并用java调用存储过程,希望实现用户输入一个对应的“会员ID”以后删除两个表中具有相同“会员ID”的行,但是无论我输入什么ID两个表数据都会被清空。


public class DeleteMemberGUI extends JFrame {
    private JTextField memberIdField;
    private JButton deleteButton;

    public DeleteMemberGUI() {
        memberIdField = new JTextField(10);
        deleteButton = new JButton("删除");

        deleteButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int memberId = Integer.parseInt(memberIdField.getText());
                deleteMemberAndRebate(memberId);
            }
        });

        JPanel panel = new JPanel();
        panel.add(new JLabel("会员ID:"));
        panel.add(memberIdField);
        panel.add(deleteButton);

        add(panel);

        setTitle("Delete_Member_And_Rebate");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    private void deleteMemberAndRebate(int memberId) {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/first?useSSL=false&serverTimezone=UTC", "root", "lwj20021227");

            PreparedStatement deleteStmt = conn.prepareStatement("CALL Delete_Member_And_Rebate(?)");


            deleteStmt.setInt(1, memberId);
            deleteStmt.executeUpdate();

            conn.close();

            JOptionPane.showMessageDialog(null, "会员和相关返利数据删除成功");
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "删除会员和返利数据时发生错误");
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new DeleteMemberGUI();
            }
        });
    }
}

以下是sql语句

-- 创建会员基本信息表(Member_Information)
CREATE TABLE Member_Information (
    Member_ID INT PRIMARY KEY, -- 会员ID,主键
    Name VARCHAR(50), -- 姓名
    Gender VARCHAR(10), -- 性别
    Age INT, -- 年龄
    Work_Place VARCHAR(100), -- 工作单位
    Contact VARCHAR(15) -- 联系方式
);
-- 创建会员返利信息表(Member_Rebate)
CREATE TABLE Member_Rebate (
    Rebate_ID INT PRIMARY KEY, -- 返利信息ID,主键
    Member_ID INT , -- 会员ID,外键,关联到会员基本信息表的会员ID
    Points INT, -- 会员积分情况
    Discount_Level VARCHAR(50), -- 享受优惠等级
    Goods_Traffic VARCHAR(50), -- 货物流量
    Consumer_Group VARCHAR(50) -- 消费人群
);
--存储过程
DELIMITER //

CREATE PROCEDURE Delete_Member_And_Rebate(IN member_id INT)
BEGIN
    -- 删除会员返利信息表中具有指定会员ID的行
    DELETE FROM Member_Rebate WHERE Member_ID = member_id;

    -- 删除会员基本信息表中具有指定会员ID的行
    DELETE FROM Member_Information WHERE Member_ID = member_id;

    SELECT ROW_COUNT() AS deleted_rows;
END //

DELIMITER ;

变量member_id你能换个名字吗,和表的字段Member_ID一样的,那不where true了吗

【以下回答由 GPT 生成】

为了保证只删除具有相同会员ID的行,而不是清空所有数据,可以对存储过程进行修改。

首先,需要查看存储过程的具体代码,找到删除表的逻辑。如果存储过程中使用了DELETE语句删除表中的所有数据,需要对其进行修改。可以通过添加WHERE子句来限制只删除具有相同会员ID的行。

假设存储过程中删除表的代码如下:

DELETE FROM 表名;

我们可以修改为:

DELETE FROM 表名 WHERE 会员ID = ?;

其中,?表示会员ID是一个参数,我们需要在Java代码中设置这个参数的值。

在Java代码中,修改如下:

private void deleteMemberAndRebate(int memberId) {
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/first?useSSL=false&serverTimezone=UTC", "root", "lwj20021227");

        PreparedStatement deleteStmt = conn.prepareStatement("CALL Delete_Member_And_Rebate(?)");

        deleteStmt.setInt(1, memberId);
        deleteStmt.executeUpdate();

        conn.close();

        JOptionPane.showMessageDialog(null, "删除完成。");

    } catch (Exception e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, "删除失败。");
    }
}

这样修改后,存储过程执行的删除语句将根据用户输入的会员ID来删除具有相同会员ID的行。

请注意,这只是一个示例代码,根据实际情况可能需要对代码做进一步的调整。另外,为了安全起见,建议在执行任何删除操作之前,先备份数据。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^