Для хранения данных, как правило, используются базы данных. В приложениях на 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)){
В случае удачного подключения после запуска приложения мы увидим соответствующее сообщение в браузере:
Если же что-то установлено неправильно: строка подключения, логин, пароль, не загужен драйвер или что-то еще, то мы увидим сообщение об ошибке.