【问题标题】:Handle via Exceptions: com.mysql.jdbc.MysqlDataTruncation通过异常处理:com.mysql.jdbc.MysqlDataTruncation
【发布时间】:2017-04-14 00:53:12
【问题描述】:

我的 Java 有点生疏了,我想提高我的代码质量。我想处理带有异常的预期错误,但不知道如何处理。

我知道try catch。但是我的总是看起来像这样,没有任何处理:

try { ...}

catch (SQLException e) {
  e.printStackTrace();
  System.exit(1);
}

我将 Java JDBC 与 MySQL 一起使用,但出现了这个具体错误:

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'。但是它没有讨论如何通过异常来处理它。

【问题讨论】:

  • 几乎没有使用System.exit 的好理由,除非是在非常基本的控制台应用程序中。

标签: java mysql jdbc exception-handling


【解决方案1】:

如何通过异常处理来解决这个问题?

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

SQLException 是我的错误的正确异常吗?

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-25
    • 2011-09-14
    • 2020-09-03
    • 2023-03-10
    • 2014-09-07
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    相关资源
    最近更新 更多