Как использовать базу данных MySQL в Java
217К открытий221К показов
В этой статье мы научимся подключаться к базе данных MySQL из Java-кода и выполнять простые запросы для получения и обновления данных. Для того, чтобы получить доступ к базе данных, мы будем использовать JDBC (Java Database Connectivity) API, который входит в стандартную библиотеку Java. JDBC позволяет подключиться к любой базе данных: Postgres, MySQL, SQL Server, Oracle и т. д. — при наличии соответствующей реализации драйвера, необходимого для подключения. Для базы данных MySQL мы будем использовать драйвер Type 4 JDBC из пакета mysql-connector-java-5.1.23-bin.jar
. Он написан на чистой Java, а значит, нам не понадобятся какие-либо нативные библиотеки или ODBC-мост. Все, что нам надо будет сделать — это положить JAR-файл в директорию, содержащуюся в CLASSPATH. JAR-файл содержит класс com.mysql.jdbc.Driver
, необходимый для подключения к MySQL. Если его не окажется в CLASSPATH, во время выполнения программы выбросится исключение java.lang.ClassNotFoundException
, поэтому убедитесь, что вы правильно настроили пути.
Кстати, если вы ищете хорошую книгу по использованию JDBC, обратите внимание на Practical Database Programming with Java (Ying Bai). Это относительно новая книга, и в ней рассматриваются две самые популярные базы данных: Oracle и SQL Server 2008. В книге используется IDE NetBeans для примеров и описываются все инструменты, необходимые для работы с базами данных в Java. Это отличная книга для начинающих и опытных программистов.
Подключаем базу данных MySQL с помощью JDBC
Для того, чтобы подключить базу данных MySQL, нам потребуется четыре вещи:
- Строка подключения JDBC (например:
jdbc:mysql://localhost:3306/test). - Имя пользователя (root).
- Пароль (root).
- База данных с некоторым количеством таблиц для примера (например, база данных книг).
Строка подключения для MySQL начинается с jdbc:mysql
. Это название протокола соединения, за которым следуют хост и порт подключения, на которых запущена база данных. В нашем случае это localhost
с портом по умолчанию 3306 (если вы его не поменяли при установке). Следующая часть — test
— имя базы данных, которая уже существует в MySQL. Мы можем создать таблицу Books
:
и наполнить её хорошими книгами:
Программа на Java, которая использует базу данных
Теперь давайте напишем программу на Java, которая будет подключаться к нашей базе данных, запущенной на localhost
. Важно помнить о том, что необходимо закрывать соединение, запросы и результат выполнения после завершения работы с ними. Также важно закрывать их в finally-блоке, со своей try/catch оберткой, поскольку сам метод close()
может кинуть исключение, что приведет к утечке ресурсов. За подробной информацией вы можете обратиться к этой статье. Кроме того, вы можете использовать обертку try-with-resource, которая появилась в Java 7. Более того, это стандартный способ работы с ресурсами в Java 1.7.
При первом запуске у вас, возможно, будет ошибка No suitable driver found for jdbc:mysql
, если драйвера MySQL нет в CLASSPATH:
Добавим нужный JAR-файл в путь и снова запустим программу. Другая частая ошибка — указать таблицу в строке соединения: jdbc:mysql://localhost:3306/test/book
. В этом случае вылетит следущее исключение:
Успешный запуск программы выведет на экран следующее:
Результат верный, поскольку у нас в таблице только две книги: «Effective Java» и «Java Concurrency in Practice».
Кстати, если у вас был драйвер при компиляции, но отсутствует при запуске, вы получите исключение java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
. О том, как исправить эту ошибку, вы можете прочитать здесь.
Получаем данные с помощью SELECT-запроса в JDBC
Для получения данных из БД вы можете выполнить SELECT-запрос. В первом примере мы уже его использовали, но получили только количество строк. Теперь мы вернем сами строки. Большая часть программы останется без изменений, за исключением SQL-запроса и кода, возвращающего данные из объекта ResultSet
:
Этот код выведет на экран следующее:
Тут есть пара моментов, на которые следует обратить внимание. Метод rs.getInt(1)
используется для получения столбца с целочисленным типом, в нашем случае это столбец «id». Индексы в JDBC начинаются с единицы, поэтому rs.getInt(1)
вернет значение первого столбца как целое число. В случае, если вы укажете неверный индекс (многие разработчики вызывают rs.getInt(0)
для получения первого столбца), выбросится исключение InvalidColumnIndexException
. Доступ к столбцам по индексу чреват ошибками, поэтому лучше использовать имя столбца, например, rs.getInt("id")
. Подробнее об этом вы можете прочитать в этой статье. Метод getString()
используется для получения строковых значений из базы (например, VARCHAR
). Цикл будет выполняться, пока rs.next()
не вернет false
. Это значит, что строки закончились. В нашем случае в таблице две строки, поэтому цикл выполнится два раза, выводя информацию о книгах из таблицы на экран.
Добавляем данные с помощью INSERT-запроса в JDBC
Добавление данных мало отличается от их получения: мы просто используем INSERT-запрос вместо SELECT-запроса и метод executeUpdate()
вместо executeQuery()
. Этот метод используется для запросов INSERT, UPDATE и DELETE, а также для SQL DDL выражений, таких как CREATE, ALTER или DROP. Эти команды не возвращают результата, поэтому мы убираем все упоминания ResultSet
‘а в коде и изменяем запрос соответственно:
После запуска программы вы можете проверить таблицу в СУБД. На этот раз вы увидите три записи в таблице:
Теперь вы умеете подключаться к MySQL из Java-приложения и выполнять SELECT, INSERT, DELETE и UPDATE-запросы так же, как и в MySQL GUI. Для подключения мы используем объект Connection
, для чтения результатов запроса — ResultSet
. Убедитесь перед подключением, что сервер MySQL запущен и mysql-connector-java-5.1.17-bin.jar
находится в CLASSPATH, чтобы избежать ClassNotFoundException
.
Когда разберетесь с подключением и простыми запросами, имеет смысл изучить, как использовать подготавливаемые запросы (Prepared Statement) в Java для избежания SQL-инъекции. В боевом коде всегда следует использовать подготавливаемые запросы и связывание переменных.
Если вам понравилось это руководство и не терпится узнать больше о подключении и работе с базой данных из Java-программ, обратите внимание на следующие статьи:
- Как подключиться к БД Oracle из Java-приложения;
- Отличия межу Connected RowSet и Disconnected RowSet в Java;
- Как использовать пул соединений в Spring;
- 5 способов улучшить производительность БД в приложениях на Java;
- Отличия между java.util.Date и java.sql.Date в Java;
- Как выполнить INSERT или UPDATE, используя пакетные запросы JDBC;
- Десять вопросов по JDBC на собеседованиях.
Полезные ссылки
- Если у вас нет базы данных MySQL, вы можете ее скачать здесь;
- Есди у вас нет драйвера MySQL для JDBC, вы можете скачать его отсюда;
- Рекомендованную книгу «Practical Database Programming with Java» можно купить на Amazon.
Перевод статьи «How to Connect to MySQL database in Java with Example»
217К открытий221К показов