2012-03-24 11 views
0

こんにちは私は、SQLテーブル内の行を削除する次のコードを持っています。ユーザーは、jlist内の項目をクリックします。 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にはなくなり、例外が作成されます。削除は正常に機能しますが、例外を排除したいだけです。

+0

例外とは何ですか? –

+0

レコードを削除すると、Nullpointerexceptionが発生します。 valueChangedListSelectionListenerは削除されたレコードを引き続き指しています –

答えて

0

valueChanged(ListSelectionEvent)リスナーに進む前に、nullチェックを行うことができます。これは、レコードが削除されるときに値がnullになるためです。

しかし、より良い解決策があります。

関連する問題