Java 通过异常处理:com.mysql.jdbc.MysqlDataTruncation

Java 通过异常处理:com.mysql.jdbc.MysqlDataTruncation,java,mysql,jdbc,exception-handling,Java,Mysql,Jdbc,Exception Handling,我的Java有些生疏,我想提高代码的质量。我想处理带有异常的预期错误,但不知道如何处理 我知道试抓。但我的总是这样,没有任何处理: try { ...} catch (SQLException e) { e.printStackTrace(); System.exit(1); } 我将Java JDBC与MySQL一起使用,我得到了以下具体错误: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long f

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

我知道试抓。但我的总是这样,没有任何处理:

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是我的错误的正确异常吗

有一个重复的问题:。但是,它没有讨论如何通过异常处理它

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

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

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

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

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


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

几乎没有好的理由使用
系统。退出
,除了在非常基本的控制台应用程序中。