从方法引发异常方法



我有一个由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);  
    }
}

这是我从数据库返回对象的方法。

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;
}  

我必须向用户显示多条错误消息,以表示:

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

我对此有一些疑问:

  1. 是否应该停止应用程序在NULL我的结果/对象的地方执行更多操作,使用throw new NullPointerException("User Not Found");

  2. 是否可以安全地使用这些异常来发送用户消息,例如在对象为空的情况下("找不到用户"(,并通过 DAO 方法抛出它们以被JButton ActionPerformed try/Catch?捕获/显示

  3. 我应该在哪里记录异常,在DAO方法?或ActionPerforming try/Catch?中。

  4. 我应该在DAO方法中再次throw e;ActionPerformed try/Catch抓住吗?

喜欢 永远非常感谢您的帮助。

  1. IMO 最好的处理方法是创建您自己的自定义异常(扩展异常(,例如

    public class LoginException extends Exception{
      public LoginException(Exception cause, String message) {
        ..
      }
    }
    

可以使用 message 参数指定要向客户端显示的内容。

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

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

  2. 这需要我们陈述一个观点,这是题外话。无论哪种方式,您都可以这样做。但是我,我会在动作中执行此操作执行,因为单击按钮开始"事务"。

  3. 与 3 相同的答案

最新更新