5

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

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

Назад Содержание Вперед