通过例外处理:com.mysql.jdbc.MysqlDataTruncation

时间:2016-11-29 21:12:21

标签: java mysql jdbc exception-handling

我的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'。但是,它没有讨论如何通过例外处理它。

1 个答案:

答案 0 :(得分:1)

  

如何通过异常处理解决此问题?

是的,正如您已经提到的,您的应用程序应该在进入DAO层之前正确覆盖所有输入验证,以便请求不会到达/到达数据库并失败。为此,您可以在DTO bean对象上使用javax验证(如Min,Max size等,查看here)。

  

SQLException是否是我错误的正确例外?

是的,SQLException是正确的例外,但如上所述,请求应在到达DAO或点击数据库之前在顶层进行过滤。此外,您需要注意以下几点:

(1)您的异常日志记录不正确,即使用e.printStackTrace()不正确,而是使用log4j等日志框架来记录异常详细信息。

(2)在捕获SQLException之后,最佳做法是将适当的BusinessExceptionthrow包装回调用者,并向用户界面发送有意义的错误消息。如果您的应用程序只是一个后端服务/进程,那么您只需使用SQLException(根据业务需求)将log4j详细信息记录到文件中,然后收集此类异常的统计信息以确定根本原因