Для хранения данных, как правило, используются базы данных. В приложениях на Java мы можем использовать различные системы управления базами данных. Но так как, на сегодняшний день одной из наиболее используемых в приложениях на Java является СУБД MySQL, то основные моменты взаимодействия с БД будут рассматриваться преимущественно на примере MySQL.
Один из способов работы с базой данных представляет использование JDBC. JDBC (Java Database Connectivity) представляет специальный API, благодаря которому мы можем абстрагироваться от конкретной СУБД с ее особенностями и использовать единый интерфейс для работы с различными СУБД.
Для работы с базой данных в приложении на Java через JDBC необходим драйвер. Обычно разработчик каждой отдельной СУБД (MySQL, Oracle, PostgreSQL и т.д.) предоставляет специальный драйвер. Более подробно про аспекты работы в приложении Java можно посмотреть в соответствующем руководстве Java и базы данных. В данном же случае мы сосредосточимся непосредственно на работе с бд именно в JavaEE.
Для работы с MySQL необходим драйвер Connector/J, который можно загрузить с официального сайта со страницы https://dev.mysql.com/downloads/connector/j/.
На странице загрузок выберем в поле "Select Operating System" пункт "Platform Independent" и затем загрузим zip-пакет с драйвером.
Распакуем загруженный пакет и найдем файл mysql-connector-java-8.0.12.jar (версия файла может отличаться).
Создадим в Eclipse новый проект по типу Dynamic Web Project и добавим в его папку WebContent/WEB-INF/lib:
Убедимся, что сервер MySQL запущен и сперва проверим, что мы можем подключаться к серверу базы данных. Вначале создадим на сервере MySQL пустую базу данных, которую назовем products и с которой мы будет работать в приложении на Java EE. Для создания базы данных применяется выражение SQL:
CREATE DATABASE productdb;
Эту команду можно выполнить либо из консольного клиента MySQL Command Line Client, либо из графического клиента MySQL Workbench, которые устанавливются вместе с сервером MySQL. Подробнее про создание базы данных можно прочитать в статье Создание и удаление базы данных.
Далее добавим в проект сервлет. Допустим, он будет называться ProductsServlet и будет содержать следующий код:
import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/products") public class ProductsServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter writer = response.getWriter(); try{ String url = "jdbc:mysql://localhost/productdb?serverTimezone=Europe/Moscow&useSSL=false"; String username = "root"; String password = "password"; Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance(); try (Connection conn = DriverManager.getConnection(url, username, password)){ writer.println("Connection to ProductDB succesfull!"); } } catch(Exception ex){ writer.println("Connection failed..."); writer.println(ex); } finally { writer.close(); } } }
Переменная url хранит строку подключения. В частности, здесь она указывает, что сервер MySQL запущен на локальной машине (localhost), а подключение идет к бд productdb. Переменные username и password указывают соответственно на логин и пароль к серверу MySQL. В каждом конкретном случае эти значения могут отличаться.
Затем идет загрузка драйвера:
Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance();
И далее создается объект Connection для взаимодействия с базой данной:
try (Connection conn = DriverManager.getConnection(url, username, password)){
В случае удачного подключения после запуска приложения мы увидим соответствующее сообщение в браузере:
Если же что-то установлено неправильно: строка подключения, логин, пароль, не загужен драйвер или что-то еще, то мы увидим сообщение об ошибке.