Основные операции с базой данных. Часть 1

Последнее обновление: 30.09.2018

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

Финальный проект будет выглядеть следующим образом:

Работа с базой данных в JavaEE

Определим в проекте в папке 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.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850