Как настроить mysql connector java для подключения к MySQL
Для подключения Java к MySQL используйте mysql connector java – драйвер Connector/J. Добавьте его в проект и передайте JDBC URL, логин и пароль методу DriverManager.getConnection(). Вы получите соединение, через которое приложение выполняет SQL-запросы.
Инструкция поможет создать тестовую базу, прочитать строки и изменить запись. Команды запуска подходят для Windows, Linux и macOS.
- Что такое JDBC и MySQL Connector/J
- Что подготовить
- Как добавить mysql jdbc driver через Maven, Gradle или JAR
- Строка подключения JDBC URL
- Код подключения к MySQL
- Как выполнить запрос и прочитать результат
- Компиляция и запуск из командной строки
- Ошибки подключения к MySQL из Java
- Пул соединений
- Какой способ подключения выбрать
Что такое 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.10 | JRE 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.xml | Maven и интеграция IDE |
| Gradle | Зависимость в build.gradle | Gradle и интеграция 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 вручную
- На странице загрузки Connector/J выберите архив
Platform Independent. - Распакуйте архив и найдите файл
mysql-connector-j-…jar. Используйте скомпилированный драйвер, а не архив исходников. - Создайте каталог
libрядом с Java-файлами. - Положите туда JAR, сохранив исходное имя.
Classpath сообщает JVM, где искать классы приложения и библиотек. Запись lib/* включает JAR-файлы непосредственно из каталога lib. Оставьте там только одну версию Connector/J, чтобы избежать конфликтов.
Строка подключения JDBC URL
JDBC URL содержит адрес сервера, порт и имя базы. Общая форма выглядит так:
jdbc:mysql://host:port/database?parameter=value&other=valueMySQL по умолчанию использует порт 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/*' QueryDemoWindows разделяет элементы 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_URL | jdbc:mysql://localhost:3306/jdbc_demo?sslMode=DISABLED&allowPublicKeyRetrieval=true |
| DB_USER | jdbc_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 failed | JVM не доверяет сертификату либо параметры 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 отдельно от приложения. При сбое он поможет отделить настройки соединения от ошибок бизнес-логики.
Популярное за неделю
- Как создать сайт самому в 2026: 4 способа + пошаговая инструкция 34 мин чтения
- Лучшие конструкторы для создания сайтов — плюсы, минусы и сравнения 22 мин чтения
- Как преобразовать строку в целое число в Java 2 мин чтения
- Метод tostring java: как получить читаемый вывод объектов 9 мин чтения
- Do while Java и цикл while: как работают и чем отличаются 4 мин чтения
- Как создать калькулятор на Java для Android с полным кодом 5 мин чтения
Комментарии