Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Package com.mysql.jdbc.exceptions.jdbc4 does not exist in Mysql Connector/J 8

After upgrading the maven dependency for mysql-connector-java version 5.1.x to 8.0.x the following errors are received upon compilation:

[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;

Apparently the com.mysql.jdbc.exceptions.jdbc4 was removed without any deprecation or a note in the migration docs. What is the alternative now?

like image 833
Scadge Avatar asked Mar 05 '23 19:03

Scadge


1 Answers

Indeed, there was no mention of that in the release notes or migration docs. I found the relevant topic at MySQL Forums: Connector/J 8, catching primary key violations. Here is an answer from MySQL representative there:

You can catch java.sql.SQLIntegrityConstraintViolationException. MySQLIntegrityConstraintViolationException was needed because of c/J 5.1 hybrid code, it does nothing specific just extends this java.sql.SQLIntegrityConstraintViolationException.

In other words, the package has been removed to reuse the existing java.sql exception classes, which is a good thing, but still should've been documented. As a result of the forementioned discussion, the bug report has been created: Bug #91439 upgrade guide needs to inform of removed/refactored exceptions

As I further inspected the errors in my project, I found these 3 exceptions and their java.sql mappings:

  • 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

(and I guess any other MySQL-specific exception from jdbc4 package also maps to the analogous SQL-exception from java.sql package)

like image 179
Scadge Avatar answered Mar 09 '23 00:03

Scadge