-->

MySQL ver.6 (Java)

Подключение и использование MySQL версии 6 в Java-проектах изменилось по сравнению с версией 5, которые обычно приводятся в обучающих примерах, что вызывает ошибки и, как следствие, ступор у новичков.

Варианта два:
1) использовать драйвер 5-й версии, или
2) читать дальше выдержку из данного хаба ;-)

Начнем с того, что убедимся, какая версия 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 = "root";

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 — решила и эту проблему. 

Собственно, таким образом получилось реализовать подключение к MySQL 6-го поколения, через новые драйверы. Надеюсь новичкам, сталкивающимся с проблемами компиляции тестовых работ по видеоурокам и туториалам этот материал пригодится.

Комментариев нет :

Отправить комментарий