diff --git a/src/main/java/mate/academy/Main.java b/src/main/java/mate/academy/Main.java index 8140c4af..98e490bb 100644 --- a/src/main/java/mate/academy/Main.java +++ b/src/main/java/mate/academy/Main.java @@ -6,14 +6,17 @@ import mate.academy.dao.BookDao; import mate.academy.lib.Injector; import mate.academy.model.Book; +import mate.academy.util.ConnectionUtil; public class Main { private static final Injector INJECTOR = Injector.getInstance("mate.academy"); public static void main(String[] args) { + ConnectionUtil.initializeTable(); + BookDao bookDao = (BookDao) INJECTOR.getInstance(BookDao.class); - Book book1 = new Book("Book of Jungles", new BigDecimal(100)); - bookDao.create(book1); + Book book = new Book("Book of Jungles", new BigDecimal(100)); + bookDao.create(book); Optional bookById = bookDao.findById(1L); System.out.println(bookById); diff --git a/src/main/java/mate/academy/dao/BookDaoImpl.java b/src/main/java/mate/academy/dao/BookDaoImpl.java index 7a882251..bd587020 100644 --- a/src/main/java/mate/academy/dao/BookDaoImpl.java +++ b/src/main/java/mate/academy/dao/BookDaoImpl.java @@ -9,26 +9,26 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; -import mate.academy.ConnectionUtil; import mate.academy.exceptions.DataProcessingException; import mate.academy.lib.Dao; import mate.academy.model.Book; +import mate.academy.util.ConnectionUtil; @Dao public class BookDaoImpl implements BookDao { @Override public Book create(Book book) { - String sql = "INSERT INTO books (title, price) values (?, ?)"; + String query = "INSERT INTO books (title, price) values (?, ?)"; try (Connection connection = ConnectionUtil.getConnection(); PreparedStatement statement = connection.prepareStatement( - sql, Statement.RETURN_GENERATED_KEYS + query, Statement.RETURN_GENERATED_KEYS ); ) { statement.setString(1, book.getTitle()); statement.setBigDecimal(2, book.getPrice()); int affectedRows = statement.executeUpdate(); if (affectedRows < 1) { - throw new RuntimeException( + throw new DataProcessingException( "Expected to insert at least one row, but inserted 0 rows." ); } @@ -45,9 +45,9 @@ public Book create(Book book) { @Override public Optional findById(Long id) { - String sql = "SELECT * FROM books WHERE id = ?"; + String query = "SELECT * FROM books WHERE id = ?"; try (Connection connection = ConnectionUtil.getConnection(); - PreparedStatement statement = connection.prepareStatement(sql); + PreparedStatement statement = connection.prepareStatement(query); ) { statement.setLong(1, id); ResultSet resultSet = statement.executeQuery(); @@ -62,9 +62,9 @@ public Optional findById(Long id) { @Override public List findAll() { - String sql = "SELECT * FROM books"; + String query = "SELECT * FROM books"; try (Connection connection = ConnectionUtil.getConnection(); - PreparedStatement statement = connection.prepareStatement(sql); + PreparedStatement statement = connection.prepareStatement(query); ) { ResultSet resultSet = statement.executeQuery(); List books = new ArrayList<>(); @@ -79,9 +79,9 @@ public List findAll() { @Override public Book update(Book book) { - String sql = "UPDATE books SET title = ?, price = ? WHERE id = ?"; + String query = "UPDATE books SET title = ?, price = ? WHERE id = ?"; try (Connection connection = ConnectionUtil.getConnection(); - PreparedStatement statement = connection.prepareStatement(sql); + PreparedStatement statement = connection.prepareStatement(query); ) { statement.setString(1, book.getTitle()); statement.setBigDecimal(2, book.getPrice()); @@ -110,13 +110,12 @@ public boolean deleteById(Long id) { ); } - String sql = "DELETE FROM books WHERE id = ?"; + String query = "DELETE FROM books WHERE id = ?"; try (Connection connection = ConnectionUtil.getConnection(); - PreparedStatement statement = connection.prepareStatement(sql); + PreparedStatement statement = connection.prepareStatement(query); ) { statement.setLong(1, id); - int affectedRows = statement.executeUpdate(); - return affectedRows > 1; + return statement.executeUpdate() > 0; } catch (SQLException e) { throw new DataProcessingException( "Can not delete the book with the provided ID: " + id diff --git a/src/main/java/mate/academy/model/Book.java b/src/main/java/mate/academy/model/Book.java index baa63ade..53ca02c9 100644 --- a/src/main/java/mate/academy/model/Book.java +++ b/src/main/java/mate/academy/model/Book.java @@ -4,8 +4,8 @@ public class Book { private Long id; - private final String title; - private final BigDecimal price; + private String title; + private BigDecimal price; public Book(String title, BigDecimal price) { this.title = title; @@ -33,4 +33,13 @@ public String getTitle() { public BigDecimal getPrice() { return price; } + + @Override + public String toString() { + return "Book{" + + "id=" + id + + ", title='" + title + '\'' + + ", price=" + price + + '}'; + } } diff --git a/src/main/java/mate/academy/ConnectionUtil.java b/src/main/java/mate/academy/util/ConnectionUtil.java similarity index 96% rename from src/main/java/mate/academy/ConnectionUtil.java rename to src/main/java/mate/academy/util/ConnectionUtil.java index 92f2bd3d..bc225471 100644 --- a/src/main/java/mate/academy/ConnectionUtil.java +++ b/src/main/java/mate/academy/util/ConnectionUtil.java @@ -1,4 +1,4 @@ -package mate.academy; +package mate.academy.util; import java.io.BufferedReader; import java.io.FileReader; @@ -25,7 +25,6 @@ public class ConnectionUtil { try { Class.forName("com.mysql.cj.jdbc.Driver"); - initializeTable(); } catch (ClassNotFoundException e) { throw new DataProcessingException("Can not load JDBC driver"); } @@ -35,7 +34,7 @@ public static Connection getConnection() throws SQLException { return DriverManager.getConnection(DB_URL, DB_PROPERTIES); } - private static void initializeTable() { + public static void initializeTable() { try (Connection connection = getConnection()) { DatabaseMetaData databaseMetaData = connection.getMetaData(); ResultSet resultSet = databaseMetaData.getTables( diff --git a/src/main/resources/init_db.sql b/src/main/resources/init_db.sql index 38177fa7..f78c6546 100644 --- a/src/main/resources/init_db.sql +++ b/src/main/resources/init_db.sql @@ -1,5 +1,5 @@ CREATE TABLE IF NOT EXISTS books ( - id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + id BIGINT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, price DECIMAL ); \ No newline at end of file