Java:JDBC删除行问题

时间:2015-10-05 14:38:00

标签: java mysql jdbc

这是2.4.0程序,当点击按钮时,它会删除该行。但问题是它会像这样给出异常

GUI

我不知道它是什么意思但我想删除那行是否有任何方法可以解决这个问题。 这是模式和表的快照。 enter image description here
代码:

Cannot delete or update a parent row: a foreign key constraint fails (`sakila`.`film_actor`, CONSTRAINT `fk_film_actor_actor` FOREIGN KEY (`actor_id`) REFERENCES `actor` (`actor_id`) ON UPDATE CASCADE)

主要方法

public class GUI extends JFrame {

    public GUI() {
        super("Frame");
        setLayout(new FlowLayout());

        JButton b1 = new JButton("Click Delete Row");
        b1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                try {

                    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/cinema", "hussnain", "toot");

                    String query = "delete from sakila.actor where actor_id=3";
                    PreparedStatement pre = conn.prepareStatement(query);

                    pre.executeUpdate();
                    JOptionPane.showMessageDialog(null, "Query Executed");
                } catch (Exception e1) {
                    JOptionPane.showMessageDialog(null, e1.getMessage());

                    e1.printStackTrace();
                }

            }

        });

        add(b1);

        setSize(400, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);

    }

}

3 个答案:

答案 0 :(得分:0)

数据库中存在一行引用您尝试删除的actor_id。

检查film_actor表中的数据。

答案 1 :(得分:0)

您有async.eachLimit(products, 20,function(elem, cb){ var out = jQuery.param({'product':elem}); $.post('save.php', out, function(result) { $('.log').append(result); cb(); }); }, function(){ console.log("success"); }) 表的外键约束,因此在从film_actor表中删除之前,应首先从actor表中删除。

您也可以禁用外键检查,但会使数据不一致;

film_actor

答案 2 :(得分:0)

您遇到的问题是该查询报告了与film_actor相关的表actor中存在外键的错误,现在为了解决这个问题,您可以考虑2个选项:

1)(不一致) - 使用SET FOREIGN_KEY_CHECKS=0并忽略其余部分,这样在数据库中您的信息在更新/删除后可能会不一致,此选项将忽略存在其他表中的条目的其他引用,并将继续删除,但将导致其他引用指向什么,导致数据不一致

2)(建议一个) - 您可以管理数据库如何“表示”现实的方式,这意味着您可以考虑删除某些表条目将如何工作和设置如何更新/删除那些将在同一对象的其他引用中传播,这意味着例如设置

ON DELETE CASCADE

在表定义中将删除THAT表的条目以从其他表中删除同一对象的其他引用,这意味着将删除仅包含该引用的其他条目;

OR

你可以使用

ON DELETE SET NULL

,只要你在主表中删除该条目,但是如果该字段是另一个表的主键的一部分,则会将其他表中其他条目的引用字段设置为NULL,这将导致错误,

我引用了你可以用于你的案例的两个选项,但是你可以在这里查看“如何在这里工作”的答案,以便了解这一点并了解它如何适合你的情况

What is MySQL's default ON DELETE behavior?