我应该在所有的finaly中放置connection.close()吗

时间:2019-01-03 13:09:01

标签: java database

我应该最后在尝试捕获块中放入 connection.close()吗?我尝试放入connection.close(),但出现错误“ java.lang.NullPointerException

这是登录代码,是否可以在每个语句中放入 rs.close()和pst.close(),如下所示,如果没有弹出内容,我会插入它,因为就像数据库被锁定了。

登录

if(evt.getKeyCode()==KeyEvent.VK_ENTER){
        String sql = "select * from User_Table\n" +
                 "inner join Role_Table on User_Table.Role_ID=Role_Table.Role_ID\n" +
                 "where Username = ? and Password = ? and Role_Name = ?";
    try {
        pst = conn.prepareStatement(sql);
        pst.setString(1, jTextField1.getText());
        pst.setString(2, jPasswordField1.getText());
        pst.setString(3, (String) RoleComboBox.getSelectedItem());

        rs=pst.executeQuery();
    if(rs.next()){
        String A = rs.getString("First_Name");
        String B = rs.getString("Role_Name");
    if(RoleComboBox.getSelectedItem().toString().equals("Admin")){
        JOptionPane.showMessageDialog(null, "Hello "+B+" "+A,"Successfully Login",JOptionPane.INFORMATION_MESSAGE);
        rs.close();
        pst.close();
        AdminPortal AP = new AdminPortal();
        AP.setVisible(true);
        this.dispose();
    .... //and so on

    }else if(RoleComboBox.getSelectedItem().toString().equals("Laboratorist,EO")){
        JOptionPane.showMessageDialog(null, "Successfully Login");
        rs.close();
        pst.close();
    }}
    else{
        JOptionPane.showMessageDialog(null, "Incorrect Input","Error",JOptionPane.ERROR_MESSAGE);
    }
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e);
    }finally {
       try {
           rs.close();
           pst.close();
           conn.close();
       }catch(Exception e){

       }
    }
    }

这是注销的代码,当我没有放置 con.close()时,我的系统运行正常,但是当我注销并再次登录时,它开始出现一些错误,例如数据库已锁定但是当我放入 con.close()” 时,出现了一些错误“ java.lang.NullPointerException

注销

int YesOrNo = JOptionPane.showConfirmDialog(null, "Do you want to logout?", "Logout",JOptionPane.YES_NO_OPTION);
    if(YesOrNo == 0){
        try {
            dispose();
            LoginForm LF = new LoginForm ();
            LF.setVisible(true);
            AddPatient.getObj().dispose();
            AddAppointments.getObj().dispose();
        } catch (Exception ex) {

        }finally{
            try{
                rs.close();
                pst.close();
                conn.close();
            }catch(Exception e){

            }
        }
    }else{

    }

我希望有人可以帮助

2 个答案:

答案 0 :(得分:0)

如果您不再使用该连接,则可以在finally块上将其关闭。

答案 1 :(得分:0)

是的,所有类型的连接都应在finally块中关闭。