我的Java有些生疏,我想提高代码的质量。我想用异常处理可预期的错误,但实际上并不知道如何。
我知道尝试捕获。但我的看起来总是这样,没有任何处理:
try { ...}
catch (SQLException e) {
e.printStackTrace();
System.exit(1);
}
我正在使用带有MySQL的Java JDBC,我得到了这个具体的错误:
com.mysql.jdbc.MysqlDataTruncation: Data truncation:
Data too long for column 'column_name'
很明显,该值太大,需要截断。当然,我可以在将输入提供给数据库之前检查输入,但可能还有其他错误我也想处理。
如何通过异常处理解决此问题? SQLException是我错误的正确例外吗?
有一个重复的问题:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'column_name'。但是,它没有讨论如何通过例外处理它。
答案 0 :(得分:1)
如何通过异常处理解决此问题?
是的,正如您已经提到的,您的应用程序应该在进入DAO层之前正确覆盖所有输入验证,以便请求不会到达/到达数据库并失败。为此,您可以在DTO bean对象上使用javax
验证(如Min,Max size等,查看here)。
SQLException是否是我错误的正确例外?
是的,SQLException
是正确的例外,但如上所述,请求应在到达DAO或点击数据库之前在顶层进行过滤。此外,您需要注意以下几点:
(1)您的异常日志记录不正确,即使用e.printStackTrace()
不正确,而是使用log4j
等日志框架来记录异常详细信息。
(2)在捕获SQLException
之后,最佳做法是将适当的BusinessException
和throw
包装回调用者,并向用户界面发送有意义的错误消息。如果您的应用程序只是一个后端服务/进程,那么您只需使用SQLException
(根据业务需求)将log4j
详细信息记录到文件中,然后收集此类异常的统计信息以确定根本原因