Гид по технологиям

Подключение Java к MySQL: руководство по JDBC

5 min read Java Обновлено 29 Mar 2026
Java и MySQL: подключение через JDBC
Java и MySQL: подключение через JDBC

Java подключение к MySQL: пример кода и драйвер

Ключевая идея

Java предоставляет JDBC — унифицированный API для работы с базами данных. JDBC сам по себе не умеет общаться с конкретной СУБД; это делает драйвер (Connector/J для MySQL), который переводит вызовы JDBC в протокол MySQL.

Важно: JDBC — это интерфейсы (Connection, Statement, ResultSet и др.). Connector/J — реализация для MySQL.

Что потребуется

  • Java JDK (8+). Для модульной схемы Java 9+ учтите особенности module path.
  • MySQL Server (локально или удалённо).
  • MySQL Connector/J (JAR) или зависимость в сборщике (Maven/Gradle).
  • Клиент для выполнения SQL (mysql cli, MySQL Workbench и т. п.).

Загрузка драйвера (Connector/J)

Connector/J можно скачать с официального сайта MySQL или подключить как зависимость в проекте.

Maven пример:


  mysql
  mysql-connector-java
  8.0.XX

Gradle (Groovy):

implementation 'mysql:mysql-connector-java:8.0.XX'

Если вы используете старый проект без сборщика — распакуйте архив и поместите JAR в classpath при запуске.

Важно: в новых версиях драйвера класс драйвера — com.mysql.cj.jdbc.Driver (раньше использовался com.mysql.jdbc.Driver). Connector/J 8+ лучше использовать com.mysql.cj.jdbc.Driver.

Создание тестовой базы и пользователя (SQL)

Подключитесь к MySQL как администратор и выполните:

create database sample;

Создадим пользователя, который подключается с локальной машины:

create user 'testuser'@'localhost' identified by 'securepwd';

Если клиент подключается с другой машины (например, с именем или IP remotemc):

create user 'testuser'@'remotemc' identified by 'securepwd';

Дадим права на базу sample:

grant all on sample.* to 'testuser'@'localhost';

Проверка прав (создадим и удалим таблицу):

create table joe(id int primary key auto_increment, name varchar(25));
drop table joe;

Установка classpath и загрузка драйвера

Если вы запускаете приложение вручную, убедитесь, что JAR драйвера в classpath:

java -cp mysql-connector-java--bin.jar:... 

Загрузка драйвера в коде (для совместимости с некоторыми окружениями):

Class.forName("com.mysql.cj.jdbc.Driver");

Обычно это выполняется в static-блоке, чтобы приложение сразу упало с понятной ошибкой, если драйвер отсутствует:

public class Sample {
  static {
    try {
      Class.forName("com.mysql.cj.jdbc.Driver");
    } catch(ClassNotFoundException ex) {
      System.err.println("Unable to load MySQL Driver");
    }
  }
}

Современные сборщики (Maven/Gradle) и контейнеры зачастую автоматически регистрируют драйвер, и явный вызов Class.forName не обязателен, но он не вредит.

Подключение к базе (DriverManager и URL)

DriverManager может создавать соединение по JDBC URL:

String jdbcUrl = "jdbc:mysql://localhost/sample?user=testuser&password=securepwd";
Connection con = DriverManager.getConnection(jdbcUrl);

Рекомендуемая форма без встраивания пароля в URL:

String jdbcUrl = "jdbc:mysql://localhost/sample";
try (Connection con = DriverManager.getConnection(jdbcUrl, "testuser", "securepwd")) {
  System.out.println("Connected!");
}

Лучший подход — не хранить пароли в исходниках: используйте переменные окружения, конфигурацию вне репозитория, либо менеджер секретов (Vault, AWS Secrets Manager и т.д.).

Примеры полезных параметров URL (Connector/J 8+):

  • serverTimezone=UTC — установить часовой пояс сервера; часто требуется.
  • useSSL=false — отключить SSL для локальной разработки (не рекомендуется в проде).
  • allowPublicKeyRetrieval=true — иногда нужно для аутентификации с sha256_password при отсутствии SSL (осторожно!).

Пример полного URL:

String jdbcUrl = "jdbc:mysql://localhost/sample?serverTimezone=UTC&useSSL=false";

Простой пример программы проверки соединения

public class Sample {
  static {
    try {
      Class.forName("com.mysql.cj.jdbc.Driver");
    } catch(ClassNotFoundException ex) {
      System.err.println("Unable to load MySQL Driver");
    }
  }

  public static void main(String[] args) throws Exception {
    String jdbcUrl = "jdbc:mysql://localhost/sample?serverTimezone=UTC";
    try (Connection con = DriverManager.getConnection(jdbcUrl, "testuser", "securepwd")) {
      System.out.println("Connected!");
    }
  }
}

Обратите внимание на try-with-resources — это гарантирует закрытие соединения при нормальном и при исключительном завершении.

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

SQL-запрос выполняется через Statement или PreparedStatement. Пример вывода версии сервера:

String queryString = "select version()";
Statement stmt = con.createStatement();
ResultSet rset = stmt.executeQuery(queryString);

while (rset.next()) {
  System.out.println("Version: " + rset.getString(1));
}

rset.close();
stmt.close();

Лучше использовать PreparedStatement для параметризованных запросов — это снижает риск SQL-инъекций и часто даёт прирост производительности:

String sql = "select name from users where id = ?";
try (PreparedStatement ps = con.prepareStatement(sql)) {
  ps.setInt(1, 42);
  try (ResultSet rs = ps.executeQuery()) {
    while (rs.next()) {
      System.out.println(rs.getString("name"));
    }
  }
}

Альтернативы DriverManager — DataSource и пул соединений

DriverManager подойдёт для простых задач, но в реальных приложениях используйте DataSource и пул соединений (HikariCP, c3p0, Apache DBCP).

Пример настройки HikariCP (микропривью):

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost/sample?serverTimezone=UTC");
config.setUsername("testuser");
config.setPassword("securepwd");
HikariDataSource ds = new HikariDataSource(config);
try (Connection con = ds.getConnection()) {
  // работа с базой
}

Пулы соединений уменьшают накладные расходы на установление соединения и управляют максимальным числом одновременно открытых соединений.

Безопасность и лучшие практики

  • Не храните пароли в исходниках. Используйте переменные окружения, файлы конфигурации с ограниченным доступом или менеджеры секретов.
  • Используйте SSL в production и проверяйте сертификаты.
  • Применяйте принцип наименьших привилегий: создавайте отдельного пользователя с нужными правами.
  • Ограничьте доступ по хосту (user@’host’).
  • Используйте PreparedStatement для всех входных данных.
  • Настройте тайм-ауты соединения и запросов.

Когда этот подход не подходит

  • Высоконагруженные системы: нужно пул соединений и настройка SLI/SLO.
  • Если требуется распределённая транзакция — рассмотрите XA DataSource или специализированные координационные сервисы.
  • Для аналитики больших объёмов данных лучше использовать специальный ETL/OLAP-подход, а не множество мелких JDBC-запросов.

Контрольный список перед деплоем

  • Драйвер добавлен через зависимость/ JAR в classpath.
  • Пароли вынесены в безопасное хранилище.
  • Используется пул соединений для прод-окружения.
  • Настроены тайм-ауты и ограничение максимума соединений.
  • Включён SSL (или другая защита транспортного уровня).
  • Тесты подключения проходят на staging.

Критерии приёмки

  • Приложение устанавливает соединение с базой с помощью конфигурации без пароля в исходниках.
  • Запросы возвращают ожидаемые результаты и не вызывают утечек соединений.
  • Нагрузочные тесты не превышают допустимых лимитов MySQL при выбранной конфигурации пула.

Короткая методология подключения (шаги)

  1. Установить MySQL и создать базу/пользователя.
  2. Подключить Connector/J в проект.
  3. Настроить конфигурацию (URL, user, secret).
  4. Реализовать подключение через DataSource (пул).
  5. Написать unit/integration тесты для сценариев доступа.
  6. Проверить безопасность (секреты, SSL, права).

Часто задаваемые вопросы

Какой класс драйвера использовать?

В Connector/J 8+ используйте com.mysql.cj.jdbc.Driver. Старый класс com.mysql.jdbc.Driver поддерживается ради совместимости, но обновление рекомендуется.

Можно ли хранить пароль в JDBC URL?

Технически можно, но это плохая практика. Храните секреты в защищённых хранилищах или используйте аргументы getConnection.

Нужен ли Class.forName в современных приложениях?

В большинстве случаев нет — драйвер регистрируется автоматически при наличии JAR в classpath. Class.forName безопасен и совместим с разными окружениями.

Как избежать SQL-инъекций?

Используйте PreparedStatement и не конкатенируйте пользовательский ввод в SQL.

Также смотрите нашу шпаргалку по SQL-командам.

Резюме

Подключение Java к MySQL через JDBC — простая и стандартная задача: нужен Connector/J, грамотная конфигурация URL и безопасное хранение секретов. Для продакшн-систем используйте пул соединений и следуйте практикам безопасности.

Ключевые области для улучшения: переход на DataSource/пул, менеджер секретов, мониторинг SLI/SLO и тестирование под нагрузкой.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как защитить телефон от слежки и перехвата
Безопасность

Как защитить телефон от слежки и перехвата

Тема и шрифт Блокнота в Windows 11
Windows

Тема и шрифт Блокнота в Windows 11

Microsoft Defender: как анализировать и удалять угрозы
Безопасность Windows

Microsoft Defender: как анализировать и удалять угрозы

Adobe Animate: руководство для начинающих
Анимация

Adobe Animate: руководство для начинающих

Mission DALEK: как создать свой эпизод Doctor Who
Развлечения

Mission DALEK: как создать свой эпизод Doctor Who

Обновление приложений в Windows 11 — руководство
Windows

Обновление приложений в Windows 11 — руководство