From e9f05ac7a24fb00987d92cbb38b190db935c0d3a Mon Sep 17 00:00:00 2001 From: Vladyslav Ihnatiuk <123470878+Someboty@users.noreply.github.com> Date: Fri, 11 Aug 2023 02:50:03 +0300 Subject: [PATCH 1/4] added BookDao and connected project to db --- pom.xml | 8 ++ src/main/java/mate/academy/Main.java | 33 +++++ src/main/java/mate/academy/dao/BookDao.java | 14 ++ .../java/mate/academy/dao/BookDaoImpl.java | 122 ++++++++++++++++++ .../exception/DataProcessingException.java | 8 ++ src/main/java/mate/academy/model/Book.java | 42 ++++++ .../mate/academy/util/ConnectionUtil.java | 26 ++++ src/main/resources/init_db.sql | 3 + 8 files changed, 256 insertions(+) create mode 100644 src/main/java/mate/academy/dao/BookDao.java create mode 100644 src/main/java/mate/academy/dao/BookDaoImpl.java create mode 100644 src/main/java/mate/academy/exception/DataProcessingException.java create mode 100644 src/main/java/mate/academy/model/Book.java create mode 100644 src/main/java/mate/academy/util/ConnectionUtil.java create mode 100644 src/main/resources/init_db.sql diff --git a/pom.xml b/pom.xml index 526fbcf3..f985b04f 100644 --- a/pom.xml +++ b/pom.xml @@ -14,4 +14,12 @@ UTF-8 + + + mysql + mysql-connector-java + 8.0.33 + + + diff --git a/src/main/java/mate/academy/Main.java b/src/main/java/mate/academy/Main.java index 0058fbf9..df2c0639 100644 --- a/src/main/java/mate/academy/Main.java +++ b/src/main/java/mate/academy/Main.java @@ -1,7 +1,40 @@ package mate.academy; +import mate.academy.dao.BookDao; +import mate.academy.dao.BookDaoImpl; +import mate.academy.lib.Injector; +import mate.academy.model.Book; + +import java.math.BigDecimal; + public class Main { public static void main(String[] args) { + Injector injector = Injector.getInstance("mate.academy"); + BookDao bookDao = (BookDaoImpl) injector.getInstance(BookDao.class); + + Book cleanCodeBook = new Book(); + cleanCodeBook.setTitle("Clean Code"); + cleanCodeBook.setPrice(BigDecimal.valueOf(29.99)); + bookDao.create(cleanCodeBook); + + Book colorOfMagicBook = new Book(); + colorOfMagicBook.setTitle("The color of magic"); + colorOfMagicBook.setPrice(BigDecimal.valueOf(69.99)); + bookDao.create(colorOfMagicBook); + + System.out.println(bookDao.findById(1L)); + + colorOfMagicBook.setPrice(BigDecimal.valueOf(6.99)); + bookDao.update(colorOfMagicBook); + + System.out.println(bookDao.findAll()); + + bookDao.deleteById(colorOfMagicBook.getId()); + bookDao.findAll().stream() + .peek(b -> { + b.setPrice(b.getPrice().multiply(BigDecimal.valueOf(0.9))); + bookDao.update(b); + }).forEach(System.out::println); } } diff --git a/src/main/java/mate/academy/dao/BookDao.java b/src/main/java/mate/academy/dao/BookDao.java new file mode 100644 index 00000000..70f5463c --- /dev/null +++ b/src/main/java/mate/academy/dao/BookDao.java @@ -0,0 +1,14 @@ +package mate.academy.dao; + +import mate.academy.model.Book; + +import java.util.List; +import java.util.Optional; + +public interface BookDao { + Book create(Book book); + Optional findById(Long id); + List findAll(); + Book update(Book book); + boolean deleteById(Long id); +} diff --git a/src/main/java/mate/academy/dao/BookDaoImpl.java b/src/main/java/mate/academy/dao/BookDaoImpl.java new file mode 100644 index 00000000..0fb7d5f2 --- /dev/null +++ b/src/main/java/mate/academy/dao/BookDaoImpl.java @@ -0,0 +1,122 @@ +package mate.academy.dao; + +import java.math.BigDecimal; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import mate.academy.exception.DataProcessingException; +import mate.academy.lib.Dao; +import mate.academy.model.Book; +import mate.academy.util.ConnectionUtil; + +@Dao +public class BookDaoImpl implements BookDao { + private static final String CREATE_QUERY = "INSERT INTO books (id, title, price) VALUES (?, ?, ?)"; + private static final String FIND_BY_ID_QUERY = "SELECT * FROM books WHERE id = ?"; + private static final String FIND_ALL_QUERY = "SELECT * FROM books"; + private static final String UPDATE_QUERY = "UPDATE books SET title = ?, price = ? WHERE id = ?"; + private static final String DELETE_QUERY = "DELETE FROM books WHERE id = ?"; + private static final String ID_COLUMN = "books.id"; + private static final String TITLE_COLUMN = "books.title"; + private static final String PRICE_COLUMN = "books.price"; + + + @Override + public Book create(Book book) { + try (Connection connection = ConnectionUtil.getConnection(); + PreparedStatement statement = connection.prepareStatement(CREATE_QUERY, Statement.RETURN_GENERATED_KEYS)) { + + statement.setLong(1, book.getId()); + statement.setString(2, book.getTitle()); + statement.setBigDecimal(3, book.getPrice()); + + if (statement.executeUpdate() == 0) { + throw new RuntimeException("Expected to insert at least 1 row, but inserted 0 rows."); + } + ResultSet generatedKeys = statement.getGeneratedKeys(); + if (generatedKeys.next()) { + Integer id = generatedKeys.getObject(1, Integer.class); + book.setId(id); + } + } catch (SQLException e) { + throw new DataProcessingException("Can't save a book " + book, e); + } + return book; + } + + @Override + public Optional findById(Long id) { + try (Connection connection = ConnectionUtil.getConnection(); + PreparedStatement statement = connection.prepareStatement(FIND_BY_ID_QUERY)) { + + statement.setLong(1, id); + ResultSet resultSet = statement.executeQuery(); + if (resultSet.next()) { + return Optional.of(formBookFromQuery(resultSet)); + } + return Optional.empty(); + } catch (SQLException e) { + throw new DataProcessingException("Can't get a book by id " + id, e); + } + } + + @Override + public List findAll() { + try (Connection connection = ConnectionUtil.getConnection(); + PreparedStatement statement = connection.prepareStatement(FIND_ALL_QUERY)) { + + ResultSet resultSet = statement.executeQuery(); + List books = new ArrayList<>(); + while (resultSet.next()) { + books.add(formBookFromQuery(resultSet)); + } + return books; + } catch (SQLException e) { + throw new DataProcessingException("Can't get a book list from db", e); + } + } + + @Override + public Book update(Book book) { + try (Connection connection = ConnectionUtil.getConnection(); + PreparedStatement statement = connection.prepareStatement(UPDATE_QUERY)) { + + statement.setString(1, book.getTitle()); + statement.setBigDecimal(2, book.getPrice()); + statement.setLong(3, book.getId()); + + if (statement.executeUpdate() == 0) { + throw new RuntimeException("Expected to insert at least 1 row, but inserted 0 rows."); + } + } catch (SQLException e) { + throw new DataProcessingException("Can't find a book " + book, e); + } + return null; + } + + @Override + public boolean deleteById(Long id) { + try (Connection connection = ConnectionUtil.getConnection(); + PreparedStatement statement = connection.prepareStatement(DELETE_QUERY)) { + + statement.setLong(1, id); + + return statement.executeUpdate() > 0; + } catch (SQLException e) { + throw new DataProcessingException("Can't delete a book by id = " + id, e); + } + } + + private Book formBookFromQuery(ResultSet resultSet) throws SQLException{ + Book book = new Book(); + book.setId(resultSet.getObject(ID_COLUMN, Long.class)); + book.setTitle(resultSet.getObject(TITLE_COLUMN, String.class)); + book.setPrice(resultSet.getObject(PRICE_COLUMN, BigDecimal.class)); + return book; + } +} diff --git a/src/main/java/mate/academy/exception/DataProcessingException.java b/src/main/java/mate/academy/exception/DataProcessingException.java new file mode 100644 index 00000000..8b9af584 --- /dev/null +++ b/src/main/java/mate/academy/exception/DataProcessingException.java @@ -0,0 +1,8 @@ +package mate.academy.exception; + +public class DataProcessingException extends RuntimeException{ + public DataProcessingException(String message, Throwable ex) { + super(message, ex); + } + +} diff --git a/src/main/java/mate/academy/model/Book.java b/src/main/java/mate/academy/model/Book.java new file mode 100644 index 00000000..619de082 --- /dev/null +++ b/src/main/java/mate/academy/model/Book.java @@ -0,0 +1,42 @@ +package mate.academy.model; + +import java.math.BigDecimal; + +public class Book { + private long id; + private String title; + private BigDecimal price; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + + @Override + public String toString() { + return "Book{" + + "id=" + id + + ", title='" + title + '\'' + + ", price=" + price + + '}'; + } +} diff --git a/src/main/java/mate/academy/util/ConnectionUtil.java b/src/main/java/mate/academy/util/ConnectionUtil.java new file mode 100644 index 00000000..6205bab9 --- /dev/null +++ b/src/main/java/mate/academy/util/ConnectionUtil.java @@ -0,0 +1,26 @@ +package mate.academy.util; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Properties; + +public class ConnectionUtil { + public static final String DB_URL = "jdbc:mysql://localhost:3306/book_schema"; + public static final Properties DB_PROPERTIES; + static { + DB_PROPERTIES = new Properties(); + DB_PROPERTIES.put("user", "root"); + DB_PROPERTIES.put("password", "qwerty123"); + + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + throw new RuntimeException("Failed to load JDBC driver", e); + } + } + + public static Connection getConnection() throws SQLException { + return DriverManager.getConnection(DB_URL, DB_PROPERTIES); + } +} diff --git a/src/main/resources/init_db.sql b/src/main/resources/init_db.sql new file mode 100644 index 00000000..04257e8f --- /dev/null +++ b/src/main/resources/init_db.sql @@ -0,0 +1,3 @@ +CREATE DATABASE book_schema; +USE book_schema; +CREATE TABLE books (`id` BIGINT NOT NULL AUTO_INCREMENT, `title` VARCHAR(255), `price` DECIMAL, PRIMARY KEY (`id`)); From 3a0f96e02bad003dff506abf8348ac9cfe8979a4 Mon Sep 17 00:00:00 2001 From: Vladyslav Ihnatiuk <123470878+Someboty@users.noreply.github.com> Date: Sat, 12 Aug 2023 16:29:33 +0300 Subject: [PATCH 2/4] removed extra spaces in import section --- src/main/java/mate/academy/Main.java | 3 +-- src/main/java/mate/academy/dao/BookDao.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/mate/academy/Main.java b/src/main/java/mate/academy/Main.java index df2c0639..a416fb4d 100644 --- a/src/main/java/mate/academy/Main.java +++ b/src/main/java/mate/academy/Main.java @@ -1,12 +1,11 @@ package mate.academy; +import java.math.BigDecimal; import mate.academy.dao.BookDao; import mate.academy.dao.BookDaoImpl; import mate.academy.lib.Injector; import mate.academy.model.Book; -import java.math.BigDecimal; - public class Main { public static void main(String[] args) { Injector injector = Injector.getInstance("mate.academy"); diff --git a/src/main/java/mate/academy/dao/BookDao.java b/src/main/java/mate/academy/dao/BookDao.java index 70f5463c..7059a972 100644 --- a/src/main/java/mate/academy/dao/BookDao.java +++ b/src/main/java/mate/academy/dao/BookDao.java @@ -1,9 +1,8 @@ package mate.academy.dao; -import mate.academy.model.Book; - import java.util.List; import java.util.Optional; +import mate.academy.model.Book; public interface BookDao { Book create(Book book); From d8e6521c4316e8225d80f01368b6a6a659c0fd8a Mon Sep 17 00:00:00 2001 From: Vladyslav Ihnatiuk <123470878+Someboty@users.noreply.github.com> Date: Sat, 12 Aug 2023 16:45:30 +0300 Subject: [PATCH 3/4] removed magic numbers in BookDaoImpl --- .../java/mate/academy/dao/BookDaoImpl.java | 52 ++++++++++++------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/src/main/java/mate/academy/dao/BookDaoImpl.java b/src/main/java/mate/academy/dao/BookDaoImpl.java index 0fb7d5f2..f38c8d94 100644 --- a/src/main/java/mate/academy/dao/BookDaoImpl.java +++ b/src/main/java/mate/academy/dao/BookDaoImpl.java @@ -16,6 +16,13 @@ @Dao public class BookDaoImpl implements BookDao { + private static final int ZERO_UPDATES = 0; + private static final int ID_INDEX = 1; + private static final int TITLE_INDEX = 2; + private static final int PRICE_INDEX = 3; + private static final int TITLE_INDEX_FOR_UPDATE = 1; + private static final int PRICE_INDEX_FOR_UPDATE = 2; + private static final int ID_INDEX_FOR_UPDATE = 3; private static final String CREATE_QUERY = "INSERT INTO books (id, title, price) VALUES (?, ?, ?)"; private static final String FIND_BY_ID_QUERY = "SELECT * FROM books WHERE id = ?"; private static final String FIND_ALL_QUERY = "SELECT * FROM books"; @@ -24,27 +31,32 @@ public class BookDaoImpl implements BookDao { private static final String ID_COLUMN = "books.id"; private static final String TITLE_COLUMN = "books.title"; private static final String PRICE_COLUMN = "books.price"; - + private static final String NO_UPDATES_EXCEPTION_TEXT = "Expected to insert at least 1 row, but inserted 0 rows."; + private static final String CREATING_BOOK_EXCEPTION_TEXT = "Can't save a book "; + private static final String FINDING_BOOK_BY_ID_EXCEPTION_TEXT = "Can't get a book by id = "; + private static final String GETTING_LIST_OF_ALL_BOOKS_EXCEPTION_TEXT = "Can't get a book list from db"; + private static final String UPDATING_BOOK_EXCEPTION_TEXT = "Can't update book "; + private static final String DELETING_BOOK_BY_ID_EXCEPTION_TEXT = "Can't delete a book by id = "; @Override public Book create(Book book) { try (Connection connection = ConnectionUtil.getConnection(); PreparedStatement statement = connection.prepareStatement(CREATE_QUERY, Statement.RETURN_GENERATED_KEYS)) { - statement.setLong(1, book.getId()); - statement.setString(2, book.getTitle()); - statement.setBigDecimal(3, book.getPrice()); + statement.setLong(ID_INDEX, book.getId()); + statement.setString(TITLE_INDEX, book.getTitle()); + statement.setBigDecimal(PRICE_INDEX, book.getPrice()); - if (statement.executeUpdate() == 0) { - throw new RuntimeException("Expected to insert at least 1 row, but inserted 0 rows."); + if (statement.executeUpdate() == ZERO_UPDATES) { + throw new RuntimeException(NO_UPDATES_EXCEPTION_TEXT); } ResultSet generatedKeys = statement.getGeneratedKeys(); if (generatedKeys.next()) { - Integer id = generatedKeys.getObject(1, Integer.class); + Integer id = generatedKeys.getObject(ID_INDEX, Integer.class); book.setId(id); } } catch (SQLException e) { - throw new DataProcessingException("Can't save a book " + book, e); + throw new DataProcessingException(CREATING_BOOK_EXCEPTION_TEXT + book, e); } return book; } @@ -54,14 +66,14 @@ public Optional findById(Long id) { try (Connection connection = ConnectionUtil.getConnection(); PreparedStatement statement = connection.prepareStatement(FIND_BY_ID_QUERY)) { - statement.setLong(1, id); + statement.setLong(ID_INDEX, id); ResultSet resultSet = statement.executeQuery(); if (resultSet.next()) { return Optional.of(formBookFromQuery(resultSet)); } return Optional.empty(); } catch (SQLException e) { - throw new DataProcessingException("Can't get a book by id " + id, e); + throw new DataProcessingException(FINDING_BOOK_BY_ID_EXCEPTION_TEXT + id, e); } } @@ -77,7 +89,7 @@ public List findAll() { } return books; } catch (SQLException e) { - throw new DataProcessingException("Can't get a book list from db", e); + throw new DataProcessingException(GETTING_LIST_OF_ALL_BOOKS_EXCEPTION_TEXT, e); } } @@ -86,15 +98,15 @@ public Book update(Book book) { try (Connection connection = ConnectionUtil.getConnection(); PreparedStatement statement = connection.prepareStatement(UPDATE_QUERY)) { - statement.setString(1, book.getTitle()); - statement.setBigDecimal(2, book.getPrice()); - statement.setLong(3, book.getId()); + statement.setString(TITLE_INDEX_FOR_UPDATE, book.getTitle()); + statement.setBigDecimal(PRICE_INDEX_FOR_UPDATE, book.getPrice()); + statement.setLong(ID_INDEX_FOR_UPDATE, book.getId()); - if (statement.executeUpdate() == 0) { - throw new RuntimeException("Expected to insert at least 1 row, but inserted 0 rows."); + if (statement.executeUpdate() == ZERO_UPDATES) { + throw new RuntimeException(NO_UPDATES_EXCEPTION_TEXT); } } catch (SQLException e) { - throw new DataProcessingException("Can't find a book " + book, e); + throw new DataProcessingException(UPDATING_BOOK_EXCEPTION_TEXT + book, e); } return null; } @@ -104,11 +116,11 @@ public boolean deleteById(Long id) { try (Connection connection = ConnectionUtil.getConnection(); PreparedStatement statement = connection.prepareStatement(DELETE_QUERY)) { - statement.setLong(1, id); + statement.setLong(ID_INDEX, id); - return statement.executeUpdate() > 0; + return statement.executeUpdate() > ZERO_UPDATES; } catch (SQLException e) { - throw new DataProcessingException("Can't delete a book by id = " + id, e); + throw new DataProcessingException(DELETING_BOOK_BY_ID_EXCEPTION_TEXT + id, e); } } From 83ce8405dd73a9c611d9e2dc92cc055a9cf57057 Mon Sep 17 00:00:00 2001 From: Vladyslav Ihnatiuk <123470878+Someboty@users.noreply.github.com> Date: Mon, 14 Aug 2023 12:02:50 +0300 Subject: [PATCH 4/4] add spaces between methods in BookDao, removed queries from constants to methods variables, renamed update index's constants for better readability, renamed "formBookFromQuery()" into "parseBookFromQuery", removed redundant line in DataProcessingException, put query at init_db.sql in separate lines for better readability, changed NO_UPDATES_EXCEPTION_TEXT for greater correctness of the message --- src/main/java/mate/academy/dao/BookDao.java | 4 +++ .../java/mate/academy/dao/BookDaoImpl.java | 35 ++++++++----------- .../exception/DataProcessingException.java | 1 - src/main/resources/init_db.sql | 6 +++- 4 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/main/java/mate/academy/dao/BookDao.java b/src/main/java/mate/academy/dao/BookDao.java index 7059a972..d60c063d 100644 --- a/src/main/java/mate/academy/dao/BookDao.java +++ b/src/main/java/mate/academy/dao/BookDao.java @@ -6,8 +6,12 @@ public interface BookDao { Book create(Book book); + Optional findById(Long id); + List findAll(); + Book update(Book book); + boolean deleteById(Long id); } diff --git a/src/main/java/mate/academy/dao/BookDaoImpl.java b/src/main/java/mate/academy/dao/BookDaoImpl.java index f38c8d94..45761f3b 100644 --- a/src/main/java/mate/academy/dao/BookDaoImpl.java +++ b/src/main/java/mate/academy/dao/BookDaoImpl.java @@ -20,18 +20,13 @@ public class BookDaoImpl implements BookDao { private static final int ID_INDEX = 1; private static final int TITLE_INDEX = 2; private static final int PRICE_INDEX = 3; - private static final int TITLE_INDEX_FOR_UPDATE = 1; - private static final int PRICE_INDEX_FOR_UPDATE = 2; - private static final int ID_INDEX_FOR_UPDATE = 3; - private static final String CREATE_QUERY = "INSERT INTO books (id, title, price) VALUES (?, ?, ?)"; - private static final String FIND_BY_ID_QUERY = "SELECT * FROM books WHERE id = ?"; - private static final String FIND_ALL_QUERY = "SELECT * FROM books"; - private static final String UPDATE_QUERY = "UPDATE books SET title = ?, price = ? WHERE id = ?"; - private static final String DELETE_QUERY = "DELETE FROM books WHERE id = ?"; + private static final int TITLE_INDEX_FOR_UPDATE_OPERATION = 1; + private static final int PRICE_INDEX_FOR_UPDATE_OPERATION = 2; + private static final int ID_INDEX_FOR_UPDATE_OPERATION = 3; private static final String ID_COLUMN = "books.id"; private static final String TITLE_COLUMN = "books.title"; private static final String PRICE_COLUMN = "books.price"; - private static final String NO_UPDATES_EXCEPTION_TEXT = "Expected to insert at least 1 row, but inserted 0 rows."; + private static final String NO_UPDATES_EXCEPTION_TEXT = "Expected to update at least 1 value, but updated 0 values."; private static final String CREATING_BOOK_EXCEPTION_TEXT = "Can't save a book "; private static final String FINDING_BOOK_BY_ID_EXCEPTION_TEXT = "Can't get a book by id = "; private static final String GETTING_LIST_OF_ALL_BOOKS_EXCEPTION_TEXT = "Can't get a book list from db"; @@ -41,7 +36,7 @@ public class BookDaoImpl implements BookDao { @Override public Book create(Book book) { try (Connection connection = ConnectionUtil.getConnection(); - PreparedStatement statement = connection.prepareStatement(CREATE_QUERY, Statement.RETURN_GENERATED_KEYS)) { + PreparedStatement statement = connection.prepareStatement("INSERT INTO books (id, title, price) VALUES (?, ?, ?)", Statement.RETURN_GENERATED_KEYS)) { statement.setLong(ID_INDEX, book.getId()); statement.setString(TITLE_INDEX, book.getTitle()); @@ -64,12 +59,12 @@ public Book create(Book book) { @Override public Optional findById(Long id) { try (Connection connection = ConnectionUtil.getConnection(); - PreparedStatement statement = connection.prepareStatement(FIND_BY_ID_QUERY)) { + PreparedStatement statement = connection.prepareStatement("SELECT * FROM books WHERE id = ?")) { statement.setLong(ID_INDEX, id); ResultSet resultSet = statement.executeQuery(); if (resultSet.next()) { - return Optional.of(formBookFromQuery(resultSet)); + return Optional.of(parseBookFromQuery(resultSet)); } return Optional.empty(); } catch (SQLException e) { @@ -80,12 +75,12 @@ public Optional findById(Long id) { @Override public List findAll() { try (Connection connection = ConnectionUtil.getConnection(); - PreparedStatement statement = connection.prepareStatement(FIND_ALL_QUERY)) { + PreparedStatement statement = connection.prepareStatement("SELECT * FROM books")) { ResultSet resultSet = statement.executeQuery(); List books = new ArrayList<>(); while (resultSet.next()) { - books.add(formBookFromQuery(resultSet)); + books.add(parseBookFromQuery(resultSet)); } return books; } catch (SQLException e) { @@ -96,11 +91,11 @@ public List findAll() { @Override public Book update(Book book) { try (Connection connection = ConnectionUtil.getConnection(); - PreparedStatement statement = connection.prepareStatement(UPDATE_QUERY)) { + PreparedStatement statement = connection.prepareStatement("UPDATE books SET title = ?, price = ? WHERE id = ?")) { - statement.setString(TITLE_INDEX_FOR_UPDATE, book.getTitle()); - statement.setBigDecimal(PRICE_INDEX_FOR_UPDATE, book.getPrice()); - statement.setLong(ID_INDEX_FOR_UPDATE, book.getId()); + statement.setString(TITLE_INDEX_FOR_UPDATE_OPERATION, book.getTitle()); + statement.setBigDecimal(PRICE_INDEX_FOR_UPDATE_OPERATION, book.getPrice()); + statement.setLong(ID_INDEX_FOR_UPDATE_OPERATION, book.getId()); if (statement.executeUpdate() == ZERO_UPDATES) { throw new RuntimeException(NO_UPDATES_EXCEPTION_TEXT); @@ -114,7 +109,7 @@ public Book update(Book book) { @Override public boolean deleteById(Long id) { try (Connection connection = ConnectionUtil.getConnection(); - PreparedStatement statement = connection.prepareStatement(DELETE_QUERY)) { + PreparedStatement statement = connection.prepareStatement("DELETE FROM books WHERE id = ?")) { statement.setLong(ID_INDEX, id); @@ -124,7 +119,7 @@ public boolean deleteById(Long id) { } } - private Book formBookFromQuery(ResultSet resultSet) throws SQLException{ + private Book parseBookFromQuery(ResultSet resultSet) throws SQLException{ Book book = new Book(); book.setId(resultSet.getObject(ID_COLUMN, Long.class)); book.setTitle(resultSet.getObject(TITLE_COLUMN, String.class)); diff --git a/src/main/java/mate/academy/exception/DataProcessingException.java b/src/main/java/mate/academy/exception/DataProcessingException.java index 8b9af584..27877dca 100644 --- a/src/main/java/mate/academy/exception/DataProcessingException.java +++ b/src/main/java/mate/academy/exception/DataProcessingException.java @@ -4,5 +4,4 @@ public class DataProcessingException extends RuntimeException{ public DataProcessingException(String message, Throwable ex) { super(message, ex); } - } diff --git a/src/main/resources/init_db.sql b/src/main/resources/init_db.sql index 04257e8f..c7a89b5f 100644 --- a/src/main/resources/init_db.sql +++ b/src/main/resources/init_db.sql @@ -1,3 +1,7 @@ CREATE DATABASE book_schema; USE book_schema; -CREATE TABLE books (`id` BIGINT NOT NULL AUTO_INCREMENT, `title` VARCHAR(255), `price` DECIMAL, PRIMARY KEY (`id`)); +CREATE TABLE books ( + `id` BIGINT NOT NULL AUTO_INCREMENT, + `title` VARCHAR(255), + `price` DECIMAL, + PRIMARY KEY (`id`));