Не удалось подключиться к базе данных Azure с использованием Java(JDBC)

Я пытаюсь подключить базу данных Azure с помощью JDBC. Но он не может подключиться. Я правильно использовал имя сервера, имя пользователя, имя базы данных и пароль.

используя Mysql Connector v8.0.13

import java.sql.*;
import java.util.Properties;


public class MyConnection {

    public static Connection getConnection() {


        System.out.println("MySQL JDBC driver detected in library path.");

        Connection connection = null;

        try
        {


            String url ="jdbc:mysql://<servername>:3306/<databaseName>?useSSL=true&requireSSL=false"; 
            connection = DriverManager.getConnection(url, <username>, <password>);
        }
        catch (SQLException e)
        {
            //throw new SQLException("Failed to create connection to database.", e);
        }
        if (connection != null) 
        { 
            System.out.println("Successfully created connection to database.");

        }
        else {
            System.out.println("Failed to create connection to database.");
        }
        System.out.println("Execution finished.");


        return connection;
    }
}

Я ожидал показать "Успешно создано соединение с базой данных". но он показывает "Не удалось создать соединение с базой данных".

1 ответ

Решение

Так же, как резюме для комментариев и моего дополнительного контента.

Как сказал @LomatHaider, проблема, вызванная кодом Java, вызвала ошибку о часовом поясе. Согласно официальному документу MySQL MySQL Server Time Zone Support, как показано ниже.

Переменные часового пояса

MySQL Server поддерживает несколько настроек часового пояса:

  • Часовой пояс системы. Когда сервер запускается, он пытается автоматически определить часовой пояс хост-машины и использует его для установки системной переменной system_time_zone. Значение не изменяется после этого.

    Чтобы явно указать системный часовой пояс для MySQL Server при запуске, установите переменную среды TZ перед запуском mysqld. Если вы запускаете сервер с помощью mysqld_safe, его опция --timezone предоставляет другой способ установить часовой пояс системы. Допустимые значения для TZ и --timezone зависят от системы. Обратитесь к документации по вашей операционной системе, чтобы узнать, какие значения приемлемы.

  • Текущий часовой пояс сервера. Глобальная системная переменная time_zone указывает часовой пояс, в котором в данный момент работает сервер. Начальное значение time_zone - "SYSTEM", которое указывает, что часовой пояс сервера совпадает с часовым поясом системы.

Таким образом, если никогда не устанавливать переменную часового пояса для MySQL, настройка часового пояса по умолчанию в MySQL следует за часовым поясом ОС. Как я знаю, часовой пояс по умолчанию в Azure - это UTC, тогда часовой пояс локального или локального подключения клиента может отличаться от MySQL в Azure, конфликт вызвал эту проблему, например, как показано ниже.

java.sql.SQLException: The server time zone value 'Malay Peninsula Standard Time' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

Таким образом, решение исправить это как два варианта ниже:

  1. Следуйте официальному документу MySQL, чтобы SET GLOBAL time_zone = timezone; СУПЕР привилегией.
  2. Добавьте дополнительные параметры ?useTimezone=true&serverTimezone=UTC в строке подключения для принудительного использования того же значения часового пояса для сеанса подключения JDBC.

Есть блог MySQL JDBC Driver Time Zone Issue :: \[SOLVED\] ввел ту же самую проблему с этим, и исправить это вторым вариантом выше.

Другие вопросы по тегам