Рассмотрим на примере примитивного приложения основные операции с базой данных MySQL. Допустим, на сервере MySQL имеется база данных productdb, в которой определена таблица products, созданная с помощью следующей команды:
CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(30), price INT)
Таким образом, в таблице будет три столбца: id - первичный ключ, название name и цена price.
На примере примитивного приложения разберем базовые операциии с этой таблицей.
Возьмем стандартный проект Eclipse по типу Dynamic Web Project. Допустим, он будет называться mysqlapp. И прежде всего добавим в папку WebContent/WEB-INF/lib две библиотеки, которые мы будем использовать: jstl-1.2.jar и mysql-connector-java-8.0.xx.jar.
Финальный проект будет выглядеть следующим образом:
Определим в проекте в папке Java Resources/src новый пакет, допустим, он будет называться mysql.business. Добавим в этот пакет новый класс Product:
package mysqlapp.business; import java.io.Serializable; public class Product implements Serializable { private static final long serialVersionUID = 1L; private int id; private String name; private int price; public Product(){ } public Product(String name, int price){ this.name = name; this.price = price; } public Product(int id, String name, int price){ this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } }
Это стандартный класс Java Beans. Он представляет данные, с которыми мы будем работать в приложении, и соответствует структуре данных в таблице products в базе данных.
Для упрощения работы с базой данных также определим в том же пакете новый класс ProductDB:
package mysqlapp.business; import java.sql.*; import java.util.ArrayList; public class ProductDB { private static String url = "jdbc:mysql://localhost/productdb?serverTimezone=Europe/Moscow&useSSL=false"; private static String username = "root"; private static String password = "myPasswordFromMySQL"; public static ArrayList<Product> select() { ArrayList<Product> products = new ArrayList<Product>(); try{ Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance(); try (Connection conn = DriverManager.getConnection(url, username, password)){ Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT * FROM products"); while(resultSet.next()){ int id = resultSet.getInt(1); String name = resultSet.getString(2); int price = resultSet.getInt(3); Product product = new Product(id, name, price); products.add(product); } } } catch(Exception ex){ System.out.println(ex); } return products; } public static Product selectOne(int id) { Product product = null; try{ Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance(); try (Connection conn = DriverManager.getConnection(url, username, password)){ String sql = "SELECT * FROM products WHERE id=?"; try(PreparedStatement preparedStatement = conn.prepareStatement(sql)){ preparedStatement.setInt(1, id); ResultSet resultSet = preparedStatement.executeQuery(); if(resultSet.next()){ int prodId = resultSet.getInt(1); String name = resultSet.getString(2); int price = resultSet.getInt(3); product = new Product(prodId, name, price); } } } } catch(Exception ex){ System.out.println(ex); } return product; } public static int insert(Product product) { try{ Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance(); try (Connection conn = DriverManager.getConnection(url, username, password)){ String sql = "INSERT INTO products (name, price) Values (?, ?)"; try(PreparedStatement preparedStatement = conn.prepareStatement(sql)){ preparedStatement.setString(1, product.getName()); preparedStatement.setInt(2, product.getPrice()); return preparedStatement.executeUpdate(); } } } catch(Exception ex){ System.out.println(ex); } return 0; } public static int update(Product product) { try{ Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance(); try (Connection conn = DriverManager.getConnection(url, username, password)){ String sql = "UPDATE products SET name = ?, price = ? WHERE id = ?"; try(PreparedStatement preparedStatement = conn.prepareStatement(sql)){ preparedStatement.setString(1, product.getName()); preparedStatement.setInt(2, product.getPrice()); preparedStatement.setInt(3, product.getId()); return preparedStatement.executeUpdate(); } } } catch(Exception ex){ System.out.println(ex); } return 0; } public static int delete(int id) { try{ Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance(); try (Connection conn = DriverManager.getConnection(url, username, password)){ String sql = "DELETE FROM products WHERE id = ?"; try(PreparedStatement preparedStatement = conn.prepareStatement(sql)){ preparedStatement.setInt(1, id); return preparedStatement.executeUpdate(); } } } catch(Exception ex){ System.out.println(ex); } return 0; } }
Прежде всего класс определяет общие настройки подключения. Переменная url задает адрес для подключения к бд MySQL, username представляет логин, а password - пароль от сервера MySQL.
Класс определяет все основные операции с базой данных. Метод select()
получает все данные из таблицы products и создает из них список объектов Product.
Метод selectOne()
получает один элемент из таблицы по id. Если объект в бд не найден, то возвращается null.
Метод insert()
добавляет в таблицу один объект Product и возвращает количество добавленных строк.
Метод update()
обновляет в таблице один объект Product и возвращает количество обновленных строк.
Метод delete()
удаляет один объект Product и возвращает количество удаленных строк.
Логика всех методов однотипна: открывается соеднинение с бд и с помощью объектов PreparedStatement или Statement выполняется запрос к базе данных. Подробнее про выполнение операций с бд можно почитать в Руководстве по работе с базой данных в Java.