我有一个由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 错误。
我对此有一些疑问:
- 我
是否应该停止应用程序在
NULL
我的结果/对象的地方执行更多操作,使用throw new NullPointerException("User Not Found");
是否可以安全地使用这些异常来发送用户消息,例如在对象为空的情况下("找不到用户"(,并通过 DAO 方法抛出它们以被
JButton ActionPerformed try/Catch?
捕获/显示我应该在哪里记录异常,在DAO方法?或ActionPerforming try/Catch?中。
我应该在DAO方法中再次
throw e;
被ActionPerformed try/Catch
抓住吗?
喜欢 永远非常感谢您的帮助。
-
IMO 最好的处理方法是创建您自己的自定义异常(扩展异常(,例如
public class LoginException extends Exception{ public LoginException(Exception cause, String message) { .. } }
可以使用 message 参数指定要向客户端显示的内容。
通过此包装所有可能的登录异常,并将其声明为由数据库方法抛出
-
当然,这是安全的。许多程序都这样做。但最好尝试向用户澄清问题。
-
这需要我们陈述一个观点,这是题外话。无论哪种方式,您都可以这样做。但是我,我会在动作中执行此操作执行,因为单击按钮开始"事务"。
-
与 3 相同的答案