Наверняка с проблемой установления соединения народ намучался, особенно новички. Все видеоуроки и туториалы 2-х и 3-х летней давности, а это предполагает некоторые танцы с бубном, для того чтобы приконнектить новенькую mysql к java. Новичку это особенно сложно дается, как впрочем и мне, с опытом программирования в 5 дней. Однако проблему эту победил и выкладываю полный маршрут для всех интересующихся.
Начнем с того, что убедимся, какая версия mysql прописана в dependencies:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
</dependencies>
Первое что я сделал — это попал на FabricMySQLDriver, он напрочь отсутствует в новых классах работающих с 6ым mysql.
Получил ошибку «cannot resolve symbol FabricMySQLDrive».
Спустя 30 минут нашлось решение:
Connection connection = null;
Driver driver;
try {
driver = new com.mysql.cj.jdbc.Driver();
DriverManager.registerDriver(driver);
}
catch (SQLException e1) {
System.out.println("Драйвер не зарегистрировался");
return;
}
Все уже заметили что FabricMySQLDriver уже не работает, а старая библиотека com.mysql.jdbc.Driver насильно была заменена на аналогичную com.mysql.cj.jdbc.Driver
Во второй части было веселее.
try {
connection = DriverManager.getConnection(URL, USER, PASSWORD);
if (!connection.isClosed())
System.out.println("Соединение установлено");
}catch (SQLException ex){
System.err.println("Соединение не установлено");
ex.printStackTrace(); // Понадобился, чтобы отловить исключения, скрытые выводом на экран предупреждения
return;
} finally {
if (connection != null) connection.close();
}
Сначала я получил ошибку: verifyServerCertificate, где IDEA ругалась на отсутствие защищенного SLL соединения. Решение пришло с портала SOF и англоязычного форума по mysql:
public static final String URL = "jdbc:mysql://localhost:3306/mydb?autoReconnect=true&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC";
public static final String USER = "root";
public static final String PASSWORD = "povarejka";
?autoReconnect=true&useSSL=false — эта часть решила вопрос с необходимостью SSL, но следом я вилась ошибка:
java.sql.SQLException: The server time zone value 'Russia TZ 2 Standard Time' is unrecognized or represents more than one time zone
Вторая часть кода в String URL: &useLegacyDatetimeCode=false&serverTimezone=UTC — решила и эту проблему.
Собственно, таким образом получилось реализовать подключение к БД 6го поколения, через новые драйверы. Надеюсь новичкам, сталкивающимся с проблемами компиляции тестовых работ по видеоурокам и туториалам этот материал пригодится.
Автор: Возле ректора