将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;
很明显,com.mysql.jdbc.exceptions.jdbc4已删除,并且在迁移文档中未作任何弃用或注释。现在有什么选择?
答案 0 :(得分:3)
实际上,在发行说明或迁移文档中没有提及此内容。我在MySQL论坛上找到了相关主题:Connector/J 8, catching primary key violations。这是那里的MySQL代表的答案:
您可以捕获java.sql.SQLIntegrityConstraintViolationException。 由于c / J,需要MySQLIntegrityConstraintViolationException 5.1混合代码,它没有做任何特定的事情,只是扩展了此java.sql.SQLIntegrityConstraintViolationException。
换句话说,该软件包已被删除以重用现有的java.sql
异常类,这是一件好事,但仍应记录在案。作为上述讨论的结果,错误报告已经创建:Bug #91439 upgrade guide needs to inform of removed/refactored exceptions
当我进一步检查项目中的错误时,我发现了这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特定的异常也都映射到java.sql包中的类似SQL异常)