我有一个由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显示多条错误消息:
我对此有一些疑问:
我应该使用NULL
throw new NullPointerException("User Not Found");
的位置
安全地使用这些异常来发送用户消息,就像Object为null(“User not Found”)的情况一样,并通过DAO方法抛出它们以便{{1}捕获/显示}}
我应该在DAO方法中记录异常? ,或ActionPerformed try / Catch?。
我是否应JButton ActionPerformed try/Catch?
抓住DAO方法中的throw e;
?
总是非常感谢你的帮助。
答案 0 :(得分:2)
IMO处理的最佳方法是创建自己的自定义异常(扩展Exception),如
public class LoginException extends Exception{
public LoginException(Exception cause, String message) {
..
}
}
您可以使用message参数指定要向客户端显示的内容。
通过此方式包装所有可能的登录异常,并将其声明为数据库方法抛出
当然,这很安全。许多程序都是这样做的。但最好向用户澄清问题。
这要求我们陈述一个偏离主题的意见。你可以这样做。但我,我在actionPerformed中执行此操作,因为按钮单击启动"事务"。
与3