Рассмотрим на примере примитивного приложения основные операции с базой данных 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.