Устранить исключение - PullRequest
0 голосов
/ 24 марта 2012

Привет у меня есть следующий код, который удаляет строку в таблице SQL. Пользователь нажимает на элемент в jlist. Элемент в списке удаляется.

public class listdisplay implements ActionListener, ListSelectionListener {

    @Override
    public void valueChanged(ListSelectionEvent a) {

        Object obj = lstcourses.getSelectedValue() ;
        String obj1 = obj.toString() ;
    //  System.out.println(obj1) ; 

        String sql= " SELECT  *" +
                " FROM courseofferinguom " +
                " WHERE professorid=" +
                " '"+teacher.getTeacherIDint()+"'" +
                " AND coursenumber = (SELECT coursenumber "+"FROM courseuom WHERE coursename = '"+obj1+"') " ;


        try {

            statement = con.prepareStatement(sql);
            ResultSet rs = statement.executeQuery();


            if (rs != null) {

                while(rs.next())
                {
                    txtcnum.setText(rs.getString(1)) ;
                    txtdaysoftheweek.setText(rs.getString(4)) ;
                    txttime.setText(rs.getString(5)) ;
                    txtlocation.setText(rs.getString(6)) ;
                    txtcredithours.setText(rs.getString(7)) ;

                    String open = "Open" ;

                    if ( rs.getString(8).equals(open)) {

                        chkopen.setSelected(true); 

                    }



                }
            }



        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



    }

    @Override
    public void actionPerformed(ActionEvent e) {


        Object obj = lstcourses.getSelectedValue() ;
        String obj1 = obj.toString() ;

        String sql= " DELETE " +
                " FROM courseofferinguom " +
                " WHERE professorid=" +
                " '"+teacher.getTeacherIDint()+"'" +
                " AND coursenumber = (SELECT coursenumber "+"FROM courseuom WHERE coursename = '"+obj1+"') " ;


        try {

            statement = con.prepareStatement(sql) ;
            int rs = statement.executeUpdate() ;

            txtcnum.setText(" ") ;
            txtdaysoftheweek.setText(" ") ;
            txttime.setText(" ") ;
            txtlocation.setText(" ") ;
            txtcredithours.setText(" ") ;
            chkopen.setSelected(false);



        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        // refresh the jlist

        DefaultListModel listModel = new DefaultListModel();
        try{

            statement = con.prepareStatement("SELECT coursenumber "+"FROM courseofferinguom WHERE professorid = '"+teacher.getTeacherID()+"'");
            ResultSet rs1 = statement.executeQuery();

            if (rs1 != null) {

                while(rs1.next())
                {
                    statement = con.prepareStatement("SELECT coursename "+"FROM courseuom WHERE coursenumber = '"+rs1.getString(1)+"'");
                    ResultSet rs2 = statement.executeQuery();


                    if (rs2 != null) {

                        while(rs2.next())
                        {
                            listModel.addElement(rs2.getString(1)) ;

                        }

                    }

                }
            }

            lstcourses.setModel(listModel) ; 

        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        // clears the textboxes. 





    }

}

Однако, как вы можете заметить, есть слушатель valueChanged. Поэтому, когда я удаляю элемент, его больше нет в jlist, поэтому создается исключение. Удаление работает хорошо, хотя, я просто хочу устранить исключение.

1 Ответ

0 голосов
/ 24 марта 2012

Вы можете выполнить проверку null, прежде чем продолжить в своем прослушивателе valueChanged(ListSelectionEvent), так как значение будет null при удалении записи.

Хотя могут быть и лучшие решения.

...