Как настроить mysql connector java для подключения к MySQL

Для подключения Java к MySQL используйте mysql connector java – драйвер Connector/J. Добавьте его в проект и передайте JDBC URL, логин и пароль методу DriverManager.getConnection(). Вы получите соединение, через которое приложение выполняет SQL-запросы.

Инструкция поможет создать тестовую базу, прочитать строки и изменить запись. Команды запуска подходят для Windows, Linux и macOS.

Что такое JDBC и MySQL Connector/J

JDBC – стандартный Java API для работы с реляционными базами. Приложение использует интерфейсы Connection, PreparedStatement и ResultSet. Драйвер переводит вызовы этих интерфейсов в протокол конкретной СУБД.

MySQL Connector/J подключает Java-приложение к серверу MySQL. Сам драйвер не устанавливает сервер и не создает базу.

Страница загрузки Connector/J предлагает версию 26.10. Документация указывает для нее JDBC 4.2, Java (JRE) 8 и выше, MySQL Server 8.4 и выше.

Версия Connector/JПоддерживаемая JavaПоддерживаемый MySQL ServerСтатус
26.10JRE 8 и выше8.4 и вышеТекущая версия на странице загрузки

Имя класса драйвера – com.mysql.cj.jdbc.Driver. Старое имя com.mysql.jdbc.Driver устарело.

JDBC 4 поддерживает автоматическую регистрацию драйвера через механизм поставщиков служб, поэтому обычному приложению не нужен вызов Class.forName().

Явная загрузка Class.forName("com.mysql.cj.jdbc.Driver") бывает полезна при диагностике нестандартного загрузчика классов. Отсутствующий JAR этот вызов не заменяет.

Что подготовить

Инструкция начинается с уже установленного, настроенного и запущенного локального MySQL. Вам понадобится административная учетная запись с правом создания базы и пользователя. Установка сервера, его первоначальная настройка и восстановление пароля сюда не входят.

Для работы подготовьте JDK, MySQL Community Server версии 8.4 или новее и консольный клиент mysql. Клиент должен запускаться командой mysql из терминала. Ставьте JDK 25: это актуальная LTS-версия, а Connector/J 26.10 работает с Java 8 и выше. Для компиляции нужен именно JDK: он содержит программу javac.

Проверьте инструменты в терминале:

java -version
javac -version
mysql --version

Команды должны вывести сведения о версиях без ошибки поиска команды. Если система не находит Java, добавьте каталог bin установленного JDK в PATH. Доступный в терминале клиент MySQL – предварительное условие упражнения; серверный процесс mysqld для ввода SQL не подходит.

Откройте клиент под администратором. Команда предполагает учетную запись root с известным вам паролем:

mysql -u root -p

Если администратор использует другое имя, замените root в команде. Введите пароль после приглашения. После успешного входа клиент покажет приглашение mysql>, в котором можно вводить SQL.

Выполните SQL для отдельной учебной базы:

CREATE DATABASE jdbc_demo CHARACTER SET utf8mb4;
CREATE USER 'jdbc_user'@'localhost'
    IDENTIFIED BY 'LocalDemo_7xQ!';
GRANT SELECT, INSERT, UPDATE ON jdbc_demo.*
    TO 'jdbc_user'@'localhost';

USE jdbc_demo;

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(80) NOT NULL,
    department VARCHAR(40) NOT NULL,
    salary DECIMAL(10, 2) NOT NULL
);

INSERT INTO employees (id, name, department, salary) VALUES
    (1, 'Anna', 'IT', 90000.00),
    (2, 'Boris', 'Sales', 70000.00),
    (3, 'Daria', 'IT', 110000.00),
    (4, 'Ivan', 'Support', 65000.00),
    (5, 'Maria', 'IT', 95000.00);

SELECT COUNT(*) FROM employees;

Последний запрос должен вернуть 5.

Пароль в примере предназначен только для локального упражнения. Замените его собственным значением и используйте такое же в переменной окружения.

Если база или пользователь уже существуют, команды создания вернут ошибку. Не удаляйте существующие объекты ради повторения упражнения: выберите другие имена и замените их в примерах.

Как добавить mysql jdbc driver через Maven, Gradle или JAR

Выберите способ, который соответствует сборке вашего проекта. Для отдельного учебного файла достаточно JAR в каталоге lib.

СпособГде указать драйверКто собирает classpath
MavenЗависимость в pom.xmlMaven и интеграция IDE
GradleЗависимость в build.gradleGradle и интеграция IDE
JAR вручнуюКаталог lib и аргумент -cpВы в команде запуска

Maven

В Maven используйте координаты com.mysql:mysql-connector-j. Прежние координаты mysql:mysql-connector-java заменены новыми.

Добавьте блок в секцию dependencies файла pom.xml. Переменная окружения MYSQL_CONNECTOR_VERSION должна содержать номер выбранного выпуска Connector/J:

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>${env.MYSQL_CONNECTOR_VERSION}</version>
</dependency>

Номер выпуска покажет страница артефакта mysql-connector-j на Maven Central: он стоит в готовом фрагменте зависимости. Сейчас там указана версия 26.10.0.

Для сборки в терминале запишите номер в окружение этого терминала. В CMD используйте set "MYSQL_CONNECTOR_VERSION=НОМЕР_ВЕРСИИ", в Bash или Zsh – export MYSQL_CONNECTOR_VERSION='НОМЕР_ВЕРСИИ'. Замените текст справа фактическим номером.

Для сборки через IDE закрепите номер прямо в pom.xml: замените всю строку ${env.MYSQL_CONNECTOR_VERSION} внутри тега version номером выпуска. Переменная окружения после такой замены не нужна.

Обновите зависимости Maven-проекта в IDE. В списке внешних библиотек появится mysql-connector-j. Если сборщик сообщает о неразрешенной переменной версии, проверьте, что заменили выражение целиком, включая ${ и }.

Для запуска Maven-проекта из IDE выполните QueryDemo.main() с переменными DB_URL, DB_USER и DB_PASSWORD в конфигурации запуска.

Gradle

Добавьте в build.gradle репозиторий и зависимость. Пример использует Groovy DSL и ту же переменную версии:

repositories {
    mavenCentral()
}

dependencies {
    implementation "com.mysql:mysql-connector-j:${System.getenv('MYSQL_CONNECTOR_VERSION')}"
}

Для сборки в терминале задайте MYSQL_CONNECTOR_VERSION в том же окне перед запуском Gradle. Для сборки через IDE замените все выражение ${System.getenv('MYSQL_CONNECTOR_VERSION')} фактическим номером версии. Оставьте номер внутри кавычек после com.mysql:mysql-connector-j:.

Синхронизируйте Gradle-проект в IDE. Драйвер должен появиться среди зависимостей приложения.

IDE не обязана наследовать переменные из отдельно открытого терминала. Закрепленный в файле сборки номер устраняет эту зависимость и делает сборку воспроизводимой.

JAR вручную

  1. На странице загрузки Connector/J выберите архив Platform Independent.
  2. Распакуйте архив и найдите файл mysql-connector-j-…jar. Используйте скомпилированный драйвер, а не архив исходников.
  3. Создайте каталог lib рядом с Java-файлами.
  4. Положите туда JAR, сохранив исходное имя.

Classpath сообщает JVM, где искать классы приложения и библиотек. Запись lib/* включает JAR-файлы непосредственно из каталога lib. Оставьте там только одну версию Connector/J, чтобы избежать конфликтов.

Строка подключения JDBC URL

JDBC URL содержит адрес сервера, порт и имя базы. Общая форма выглядит так:

jdbc:mysql://host:port/database?parameter=value&other=value

MySQL по умолчанию использует порт 3306. Для учебной базы адрес без дополнительных параметров будет таким:

jdbc:mysql://localhost:3306/jdbc_demo

Пишите mysql строчными буквами в URL и именах пакетов. Параметры после вопросительного знака разделяйте символом &.

ПараметрЗачем нуженПример значения
sslModeУправляет TLS и проверкой сертификата сервераVERIFY_IDENTITY для защищенного подключения с проверкой имени сервера
allowPublicKeyRetrievalРазрешает получение RSA-ключа сервера при аутентификацииtrue только для подходящего доверенного окружения
connectionTimeZoneЗадает часовой пояс для временных преобразований драйвераUTC
serverTimezoneАльтернативное имя свойства connectionTimeZone в поддерживающих его выпускахUTC
characterEncodingЗадает Java-кодировку соединенияUTF-8

Описание параметров содержит документация Connector/J.

Не добавляйте параметры наугад: настройка часового пояса не исправляет пароль.

Для локального упражнения используется URL с отключенным TLS:

jdbc:mysql://localhost:3306/jdbc_demo?sslMode=DISABLED&allowPublicKeyRetrieval=true

Не переносите этот URL на удаленный сервер. Получение ключа без защищенного канала создает риск подмены сервера. Для рабочего подключения настройте TLS, доверенный сертификат и sslMode=VERIFY_IDENTITY.

Код подключения к MySQL

Сохраните класс в файле ConnectDemo.java. Программа получает настройки из окружения и открывает соединение:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectDemo {
    public static String requiredEnv(String name) {
        String value = System.getenv(name);
        if (value == null || value.isEmpty()) {
            throw new IllegalArgumentException("Missing environment variable: " + name);
        }
        return value;
    }

    public static Connection open() throws SQLException {
        return DriverManager.getConnection(
            requiredEnv("DB_URL"),
            requiredEnv("DB_USER"),
            requiredEnv("DB_PASSWORD")
        );
    }

    public static void main(String[] args) throws SQLException {
        try (Connection connection = open()) {
            System.out.println("Connected to " + connection.getCatalog());
        }
    }
}

Метод getConnection() возвращает объект Connection. Конструкция try-with-resources закрывает соединение при выходе из блока, включая выход из-за исключения.

Логин и пароль не попадают в исходный Java-файл.

Объявление throws SQLException позволяет исключению выйти из main(). При сбое консоль покажет стек вызовов с сообщением ошибки. В рабочем приложении перехватывайте исключение там, где можете обработать отказ подключения. Пароль в журнал не записывайте.

Как выполнить запрос и прочитать результат

Сохраните второй класс рядом, в файле QueryDemo.java. Он использует метод соединения из ConnectDemo, выбирает сотрудников IT-отдела и изменяет одну зарплату.

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class QueryDemo {
    public static void main(String[] args) throws SQLException {
        try (Connection connection = ConnectDemo.open()) {
            String select = "SELECT id, name, salary FROM employees "
                + "WHERE department = ? ORDER BY id";

            try (PreparedStatement statement = connection.prepareStatement(select)) {
                statement.setString(1, "IT");

                try (ResultSet rows = statement.executeQuery()) {
                    while (rows.next()) {
                        System.out.printf("%d | %s | %s%n",
                            rows.getInt("id"),
                            rows.getString("name"),
                            rows.getBigDecimal("salary").toPlainString());
                    }
                }
            }

            String update = "UPDATE employees SET salary = ? WHERE id = ?";
            try (PreparedStatement statement = connection.prepareStatement(update)) {
                statement.setBigDecimal(1, new BigDecimal("92000.00"));
                statement.setInt(2, 1);
                int changed = statement.executeUpdate();
                System.out.println("Updated rows: " + changed);
            }
        }
    }
}

PreparedStatement связывает значения с заполнителями ?; нумерация параметров начинается с 1.

Метод executeQuery() возвращает результат SELECT, а rows.next() переводит курсор на очередную строку. Методы getInt(), getString() и getBigDecimal() читают значения ее столбцов.

executeUpdate() выполняет INSERT, UPDATE или DELETE и возвращает число затронутых строк.

В примере UPDATE задает фиксированную зарплату сотруднику с идентификатором 1. Повторный запуск не увеличивает значение бесконечно.

Соединение по умолчанию работает с автоматической фиксацией изменений. Для группы связанных операций используйте явную транзакцию с commit() и rollback().

Не вставляйте пользовательский ввод в SQL через конкатенацию строк. Ввод может изменить структуру запроса и вызвать SQL-инъекцию. Параметры PreparedStatement передают значения отдельно от SQL.

Имена таблиц и столбцов параметрами не заменяются: выбирайте их из разрешенного списка.

Компиляция и запуск из командной строки

Откройте терминал в каталоге с обоими Java-файлами. Рядом должен находиться каталог lib с драйвером. Эти команды используют ручное подключение JAR.

Windows

Откройте cmd.exe. Если файлы находятся в C:\jdbc-demo, перейдите туда командой cd /d C:\jdbc-demo. Затем задайте настройки и запустите программу:

set "DB_URL=jdbc:mysql://localhost:3306/jdbc_demo?sslMode=DISABLED&allowPublicKeyRetrieval=true"
set "DB_USER=jdbc_user"
set "DB_PASSWORD=LocalDemo_7xQ!"
javac -encoding UTF-8 -cp ".;lib/*" ConnectDemo.java QueryDemo.java
java -cp ".;lib/*" ConnectDemo
java -cp ".;lib/*" QueryDemo

Команды написаны для обычного CMD без включенного delayed expansion. В PowerShell синтаксис переменных окружения отличается. Пароль замените своим, если изменили его при создании пользователя.

Linux и macOS

Перейдите в каталог проекта с помощью cd. В оболочке Bash или Zsh выполните:

export DB_URL='jdbc:mysql://localhost:3306/jdbc_demo?sslMode=DISABLED&allowPublicKeyRetrieval=true'
export DB_USER='jdbc_user'
export DB_PASSWORD='LocalDemo_7xQ!'
javac -encoding UTF-8 -cp '.:lib/*' ConnectDemo.java QueryDemo.java
java -cp '.:lib/*' ConnectDemo
java -cp '.:lib/*' QueryDemo

Windows разделяет элементы classpath точкой с запятой, Linux и macOS – двоеточием. Точка включает текущий каталог с собранными классами.

Драйвер нужен при запуске, даже если компиляция прошла без него.

Как выглядит успешный запуск

После создания таблицы первый запуск обеих программ выведет:

Connected to jdbc_demo
1 | Anna | 90000.00
3 | Daria | 110000.00
5 | Maria | 95000.00
Updated rows: 1

При повторном запуске QueryDemo первая зарплата будет 92000.00. Чтобы вернуть учебное значение, выполните SQL UPDATE jdbc_demo.employees SET salary = 90000.00 WHERE id = 1;.

Запуск из IDE с Maven или Gradle

Положите оба класса в src/main/java и загрузите зависимость Connector/J. Номер драйвера закрепите в файле сборки, чтобы IDE не требовалась переменная MYSQL_CONNECTOR_VERSION.

Откройте настройки конфигурации запуска класса QueryDemo. Найдите поле переменных окружения процесса: обычно это таблица пар «имя – значение». Добавьте три записи:

ИмяЗначение для локального упражнения
DB_URLjdbc:mysql://localhost:3306/jdbc_demo?sslMode=DISABLED&allowPublicKeyRetrieval=true
DB_USERjdbc_user
DB_PASSWORDВаш пароль пользователя jdbc_user

Вводите значения без оболочечных команд set и export, без внешних кавычек. Аргументы программы и параметры JVM -D не задают переменные окружения.

Сохраните конфигурацию и запустите QueryDemo.main(). IDE добавит драйвер из зависимостей в classpath. Вывод должен совпасть с результатом запуска через терминал.

Для отдельного запуска ConnectDemo добавьте такие же переменные в его конфигурацию.

Сообщение Missing environment variable означает, что процесс не получил указанную переменную. Если IDE не позволяет настроить окружение запуска, используйте команды CMD или Bash с JAR в lib. Они задают настройки и запускают Java в одном терминале, без зависимости от окружения IDE.

Не сохраняйте пароль в конфигурации запуска, которую публикуете в репозитории.

Ошибки подключения к MySQL из Java

Читайте сообщение исключения и вложенную причину в стеке. Ошибка загрузки класса возникает до сетевого подключения. Отказ доступа означает, что сервер уже ответил приложению.

Текст исключенияВероятная причинаЧто сделать
ClassNotFoundException: com.mysql.cj.jdbc.DriverЗагрузчик не видит JAR при явной загрузке классаДобавьте Connector/J в classpath запуска. Проверьте наличие файла в lib и регистр имени пакета.
No suitable driver foundДрайвер отсутствует либо URL имеет неверный префиксИспользуйте jdbc:mysql:// и команду java с -cp. Не ограничивайтесь classpath компилятора.
Communications link failureСервер недоступен по указанному адресу или портуПодключитесь клиентом mysql к тому же адресу по TCP. Проверьте запуск сервера, порт, сетевой доступ и проброс порта контейнера.
Access denied for userНеверные учетные данные либо неподходящая учетная запись user@hostПроверьте DB_USER и DB_PASSWORD. Войдите тем же пользователем через mysql и проверьте его права командой SHOW GRANTS;
Public Key Retrieval is not allowedАутентификация требует RSA-ключ, а драйвер запрещает его получениеДля удаленного сервера настройте TLS с проверкой сертификата. Только в локальном упражнении допустим URL с allowPublicKeyRetrieval=true.
Unknown databaseБаза не создана или ее имя написано неверноПод администратором выполните SHOW DATABASES; и сопоставьте имя с частью URL после порта.
The server time zone value ... is unrecognizedДрайвер не распознает обозначение часового поясаПосмотрите SELECT @@session.time_zone, @@system_time_zone; и задайте подходящий connectionTimeZone. Не выбирайте UTC произвольно, если приложение ожидает местное время.
SSLHandshakeException / PKIX path building failedJVM не доверяет сертификату либо параметры TLS несовместимыДобавьте доверенный центр сертификации в используемое JVM хранилище доверия. При VERIFY_IDENTITY используйте имя хоста, указанное в сертификате.

Для проверки сети выполните команду с тем же пользователем и базой:

mysql --protocol=TCP -h localhost -P 3306 -u jdbc_user -p jdbc_demo

Если клиент тоже не подключается, исправляйте сервер или учетную запись. Если клиент работает, сравните адрес, порт и переменные Java-процесса.

В MySQL 8+ используется плагин аутентификации caching_sha2_password. При полной аутентификации без TLS драйверу может понадобиться RSA-ключ сервера. Отсюда возникает ошибка Public Key Retrieval.

Разрешение получения ключа не заменяет проверку подлинности сервера.

Пул соединений

В серверном приложении запросы повторяются и выполняются параллельно. Пул хранит открытые соединения и выдает их обработчикам по запросу. HikariCP реализует такой пул для JDBC.

HikariCP не заменяет драйвер: оставьте зависимость Connector/J в проекте. Актуальная ветка HikariCP требует Java 11 или новее, поэтому JDK 25 ей подходит.

В репозитории HikariCP откройте README и найдите блок зависимости com.zaxxer:HikariCP для вашего JDK. Возьмите номер из тега version этого блока. Сейчас там указана версия 7.1.0. Добавьте зависимость в dependencies файла pom.xml:

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>${env.HIKARICP_VERSION}</version>
</dependency>

Для сборки через IDE замените выражение ${env.HIKARICP_VERSION} целиком номером из выбранного блока README. Затем обновите зависимости Maven-проекта. В списке библиотек должны остаться mysql-connector-j и появиться HikariCP.

Если запускаете сборку из терминала, выражение можно оставить. Перед сборкой задайте номер командой set "HIKARICP_VERSION=НОМЕР_ИЗ_README" в CMD или export HIKARICP_VERSION='НОМЕР_ИЗ_README' в Bash либо Zsh. Замените текст справа фактическим номером и запускайте Maven из того же окна.

Для Gradle добавьте строку в существующий блок dependencies:

implementation "com.zaxxer:HikariCP:${System.getenv('HIKARICP_VERSION')}"

При сборке через IDE замените выражение ${System.getenv('HIKARICP_VERSION')} фактическим номером и синхронизируйте проект. При сборке в терминале используйте переменную HIKARICP_VERSION из того же окна.

Сохраните класс в PoolDemo.java рядом с ConnectDemo.java. В конфигурацию запуска PoolDemo добавьте переменные DB_URL, DB_USER и DB_PASSWORD с теми же значениями:

import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class PoolDemo {
    public static void main(String[] args) throws SQLException {
        try (HikariDataSource pool = new HikariDataSource()) {
            pool.setJdbcUrl(ConnectDemo.requiredEnv("DB_URL"));
            pool.setUsername(ConnectDemo.requiredEnv("DB_USER"));
            pool.setPassword(ConnectDemo.requiredEnv("DB_PASSWORD"));
            pool.setMaximumPoolSize(5);
            try (Connection connection = pool.getConnection()) {
                System.out.println("Connected to " + connection.getCatalog());
            }
        }
    }
}

Запустите PoolDemo.main() из IDE. При успешном соединении программа выведет Connected to jdbc_demo; библиотека также может вывести служебные сообщения.

Число 5 здесь задает учебный предел пула. Размер рабочего пула подбирайте под нагрузку приложения и возможности базы.

В рабочем приложении создавайте один пул на срок его работы. Закрытие выданного Connection возвращает соединение в пул. Сам пул закрывайте при остановке приложения.

Какой способ подключения выбрать

Для отдельного упражнения используйте JAR и явный -cp. Для проекта с зависимостями подключайте драйвер через Maven или Gradle. В многопоточном серверном приложении выдавайте соединения через пул.

Начните с запуска ConnectDemo. Сообщение Connected to jdbc_demo подтвердит соединение с учебной базой. Затем запустите QueryDemo: программа прочитает три строки IT-отдела и изменит одну запись.

Сохраните минимальный ConnectDemo отдельно от приложения. При сбое он поможет отделить настройки соединения от ошибок бизнес-логики.

Комментарии

Оставьте свой комментарий
Пока никто не оставил комментариев