删除所选行时避免删除第一行

时间:2014-10-28 03:45:27

标签: java database swing delete-row

在我添加Yes/No选项之前,delete按钮仅删除了所需的行。但是,添加Yes/No选项后,数据库中的第一行将与所需行一起删除。

        b6.addActionListener (new ActionListener ()
        {
            JFrame f4=new JFrame("Are you sure?");
            JPanel p4=new JPanel();
            JButton yes=new JButton ("Yes");
            JButton no=new JButton ("No");
            public void actionPerformed (ActionEvent e)
            {
                p4.add (yes);
                p4.add (no);
                f4.add (p4);
                f4.setVisible (true);
                f4.setSize (300,200);

                yes.addActionListener (new ActionListener ()
                    {
                        public void actionPerformed (ActionEvent e)
                        {
                            try
                            {
                                f4.dispose();
                                rs.deleteRow();
                                rs.close();//
                                st.close();//to prevent gap in database
                         st=conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE,rs.CONCUR_UPDATABLE);
                                String sql="select * from trial1";
                                rs= st.executeQuery (sql);
                                rs.next();
                                t.setText (rs.getString ("Firstname"));
                                t1.setText (rs.getString ("Lastname"));
                            }
                            catch (Exception ex)
                            {
                            }
                        }
                    });

                no.addActionListener (new ActionListener ()
                    {
                        public void actionPerformed (ActionEvent e)
                        {
                            f4.dispose();
                        }
                    });

            }
        });

2 个答案:

答案 0 :(得分:1)

暂时回答,因为我现在无法检查这个问题:

我认为您将ActionListener添加到yes到<{strong> b6 actionPerformed()内的b6被称为第二次点击它(yes)意味着您在同一个yes按钮上实际拥有两个动作侦听器。

因此,当您按下rs按钮时,操作会执行两次。所以第一次,rs光标设置为您选择的行。但是,在该操作中,您将select * from trial1设置为新查询(rs)以填充字段。

因此,当激活第二个动作侦听器时,ActionListener指向的位置 - 指向最后一个查询的第一个记录。这是将被删除的记录。

要避免这一切,您必须在yes之外添加actionPerformed()到{{1}} - 可能在初始化程序块中?

答案 1 :(得分:0)

我通过对f4.dispose()的位置进行小的更改来修复故障,并且还在ActionListener中为b6包含了一个try和catch块。

 b6.addActionListener (new ActionListener ()
        {
            JFrame f4=new JFrame("Are you sure?");
            JPanel p4=new JPanel();
            JButton yes=new JButton ("Yes");
            JButton no=new JButton ("No");
            public void actionPerformed (ActionEvent e)
            {
                p4.add (yes);
                p4.add (no);
                f4.add (p4);
                f4.setVisible (true);
                f4.setSize (300,200);
                try {
                    yes.addActionListener (new ActionListener ()
                        {
                            public void actionPerformed (ActionEvent e)
                            {
                                try
                                {
                                    rs.deleteRow();
                                    rs.close();
                                    st.close();
                                    st=conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs. CONCUR_UPDATABLE);
                                    String sql="select * from trial1";
                                    rs= st.executeQuery (sql);
                                    rs.next();
                                    t.setText (rs.getString ("Firstname"));
                                    t1.setText (rs.getString ("Lastname"));
                                    f4.dispose();
                                }
                                catch (Exception ex)
                                {
                                }
                            }
                        });

                    no.addActionListener (new ActionListener ()
                        {
                            public void actionPerformed (ActionEvent e)
                            {
                                f4.dispose();
                            }
                        });

                }
                catch (Exception ex)
                {
                }

            }
        });