从方法中抛出异常方法

时间:2017-02-03 14:42:57

标签: java exception exception-handling nullpointerexception

我有一个由JButton Actionperformed触发的登录方法。

private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {

    try {

        Users userData = userDAO.login(Integer.parseInt(loginUserId.getText()), String.valueOf(loginUserPassword.getPassword()));            

    } catch (SQLException ex) {
        LOGGER.log(Level.SEVERE, ex.toString(), ex);
        JOptionPane.showMessageDialog(null, "Error SQL: Please Contact your System Administrator", cf.WINDOW_TITLE, JOptionPane.ERROR_MESSAGE);  
    } catch (NullPointerException e) {
        JOptionPane.showMessageDialog(null, e.getMessage(), cf.WINDOW_TITLE, JOptionPane.ERROR_MESSAGE);  
    } catch (NumberFormatException e) {            
        JOptionPane.showMessageDialog(null, "Pls write a number", cf.WINDOW_TITLE, JOptionPane.ERROR_MESSAGE);  
    }
}

这是我从数据库中返回Object的方法。

public Users login(int userId, String password) throws NumberFormatException, SQLException , NullPointerException {

    SQL sql = new SQL();
    query = sql.createPStatement(cf.SELECT_USER_BY_LOGIN_DATA);        
    query.setInt(1, userId);
    query.setString(2, password);
    ResultSet resultSet = query.executeQuery();
    try {
        if (!resultSet.isBeforeFirst()) {              
            throw new NullPointerException("User Not Found");
        }
        while (resultSet.next()) {
            Users newLoggedUser = new Users();
            //Set Object Values
            return newLoggedUser;
        }
    } catch (SQLException e) {
        LOGGER.log(Level.SEVERE, e.toString(), e);
        throw e;
    }  
catch (NullPointerException e) {
        LOGGER.log(Level.SEVERE, e.toString(), e);
        throw e;
    } catch (NumberFormatException e) {
  LOGGER.log(Level.SEVERE, e.toString(), e);
        throw e;
    } finally {
        SQLUtils.closeQuietly(sql.dbConection());
        SQLUtils.closeQuietly(resultSet);
        SQLUtils.closeQuietly(query);            
    }
    return null;
}  

我必须向USER显示多条错误消息:

  • 找不到用户(没有SQL结果);
  • 键入字母而不是数字
  • SQL错误。

我对此有一些疑问:

  1. 我应该使用NULL

  2. 阻止应用执行更多操作我的结果/对象位于throw new NullPointerException("User Not Found");的位置
  3. 安全地使用这些异常来发送用户消息,就像Object为null(“User not Found”)的情况一样,并通过DAO方法抛出它们以便{{1}捕获/显示}}

  4. 我应该在DAO方法中记录异常? ,或ActionPerformed try / Catch?。

  5. 我是否应JButton ActionPerformed try/Catch?抓住DAO方法中的throw e;

  6. 总是非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

  1. IMO处理的最佳方法是创建自己的自定义异常(扩展Exception),如

    public class LoginException extends Exception{
      public LoginException(Exception cause, String message) {
        ..
      }
    }
    
  2. 您可以使用message参数指定要向客户端显示的内容。

    通过此方式包装所有可能的登录异常,并将其声明为数据库方法抛出

    1. 当然,这很安全。许多程序都是这样做的。但最好向用户澄清问题。

    2. 这要求我们陈述一个偏离主题的意见。你可以这样做。但我,我在actionPerformed中执行此操作,因为按钮单击启动"事务"。

    3. 与3

    4. 相同的答案