包com.mysql.jdbc.exceptions.jdbc4在Mysql Connector / J 8中不存在

Sca*_*dge 3 java mysql-connector

mysql-connector-java版本5.1.x 的maven依赖项升级到8.0.x之后,编译时会收到以下错误:

[ERROR] /home/dev/testproject/src/main/java/DatabaseOperation.java:20: error: package com.mysql.jdbc.exceptions.jdbc4 does not exist
[ERROR] import com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException;

[ERROR] /home/dev/testproject/src/main/java/DatabaseService.java:15: error: package com.mysql.jdbc.exceptions.jdbc4 does not exist
[ERROR] import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;
Run Code Online (Sandbox Code Playgroud)

显然com.mysql.jdbc.exceptions.jdbc4已删除,迁移文档中未作任何弃用或注释。现在有什么选择?

Sca*_*dge 5

确实,在发行说明或迁移文档中没有提到这一点。我在MySQL论坛上找到了相关主题:Connector / J 8,捕获了主键冲突。这是那里的MySQL代表的答案:

您可以捕获java.sql.SQLIntegrityConstraintViolationException。由于c / J 5.1混合代码而需要MySQLIntegrityConstraintViolationException,它没有做任何特定的事情,只是扩展了此java.sql.SQLIntegrityConstraintViolationException。

换句话说,该软件包已被删除以重用现有的java.sql异常类,这是一件好事,但仍应进行记录。通过上述讨论,创建了错误报告:错误#91439升级指南需要通知已删除/重构的异常

当我进一步检查项目中的错误时,我发现了这3个异常及其java.sql映射:

  • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException -> java.sql.SQLSyntaxErrorException
  • com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException -> java.sql.SQLIntegrityConstraintViolationException
  • com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException -> java.sql.SQLTransactionRollbackException

(我猜jdbc4包中的任何其他MySQL特定于MySQL的异常也都映射到java.sql包中的类似SQL异常)

  • 这些不是“映射”。它们是基类,应该首先使用,它们是JDBC API的一部分,而不是特定于供应商的。 (5认同)