diff --git a/pom.xml b/pom.xml index 683e84ec..76157d43 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,15 @@ + + + mysql + mysql-connector-java + 8.0.33 + + + + diff --git a/src/main/java/mate/academy/Book.java b/src/main/java/mate/academy/Book.java new file mode 100644 index 00000000..244ae7b2 --- /dev/null +++ b/src/main/java/mate/academy/Book.java @@ -0,0 +1,38 @@ +package mate.academy; + +public class Book { + private Long id; + private String title; + private int price; + + public Long getId() { + return id; + } + + public String getTitle() { + return this.title; + } + + public int getPrice() { + return price; + } + + public void setId(Long id) { + this.id = id; + } + + public void setTitle(String title) { + this.title = title; + } + + public void setPrice(int price) { + this.price = price; + } + + @Override + public String toString() { + return "Book{" + "id=" + id + + ", title='" + title + '\'' + + ", price=" + price + '}'; + } +} diff --git a/src/main/java/mate/academy/ConnectionUtill.java b/src/main/java/mate/academy/ConnectionUtill.java new file mode 100644 index 00000000..08dea28d --- /dev/null +++ b/src/main/java/mate/academy/ConnectionUtill.java @@ -0,0 +1,28 @@ +package mate.academy; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Properties; + +public class ConnectionUtill { + private static final String DB_URL = "jdbc:mysql://localhost:3306/book"; + private static final Properties DB_PROPERTIES; + + static { + DB_PROPERTIES = new Properties(); + DB_PROPERTIES.put("user", "Admin"); + DB_PROPERTIES.put("password", "admin"); + + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + throw new RuntimeException("Can not load JDBC driver",e); + } + } + + public static Connection getConnection() throws SQLException { + return DriverManager.getConnection(DB_URL, DB_PROPERTIES); + } + +} diff --git a/src/main/java/mate/academy/Main.java b/src/main/java/mate/academy/Main.java index 0058fbf9..c1814869 100644 --- a/src/main/java/mate/academy/Main.java +++ b/src/main/java/mate/academy/Main.java @@ -1,7 +1,20 @@ package mate.academy; +import mate.academy.dao.BookDao; +import mate.academy.dao.BookDaoImpl; + public class Main { public static void main(String[] args) { + BookDao bookDao = new BookDaoImpl(); + System.out.println(bookDao.get(3L)); + + Book kobzar = new Book(); + kobzar.setTitle("Kobzar"); + kobzar.setPrice(30); + + Book kobzarUpdated = bookDao.save(kobzar); + System.out.println(kobzarUpdated); } } + 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..7878d629 --- /dev/null +++ b/src/main/java/mate/academy/dao/BookDao.java @@ -0,0 +1,16 @@ +package mate.academy.dao; + +import java.util.Optional; +import mate.academy.Book; + +public interface BookDao { + Book save(Book book); + + Book get(Long id); + + Optional findById(Long id); + + Book update(Book book); + + boolean delete(Book book); +} 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..57aba400 --- /dev/null +++ b/src/main/java/mate/academy/dao/BookDaoImpl.java @@ -0,0 +1,74 @@ +package mate.academy.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Optional; +import mate.academy.Book; +import mate.academy.ConnectionUtill; + +public class BookDaoImpl implements BookDao { + + @Override + public Book save(Book book) { + String sql = "INSERT INTO books (title, price) VALUES (?, ?)"; + try (Connection connection = ConnectionUtill.getConnection(); + PreparedStatement statement = connection.prepareStatement(sql, + Statement.RETURN_GENERATED_KEYS)) { + statement.setString(1, book.getTitle()); + statement.setInt(2, book.getPrice()); + int affectedRows = statement.executeUpdate(); + if (affectedRows < 1) { + throw new RuntimeException("Expected to insert at least one row, " + + "but inserted 0 rows"); + } + ResultSet generatedKeys = statement.getGeneratedKeys(); + if (generatedKeys.next()) { + Long id = generatedKeys.getObject(1, Long.class); + book.setId(id); + } + } catch (SQLException e) { + throw new RuntimeException("Can't add new book: " + book, e); + } + return book; + } + + @Override + public Book get(Long id) { + String sql = "SELECT * FROM books WHERE id = ?"; + try (Connection connection = ConnectionUtill.getConnection(); + PreparedStatement statement = connection.prepareStatement(sql)) { + statement.setLong(1, id); + ResultSet resultSet = statement.executeQuery(); + if (resultSet.next()) { + String title = resultSet.getString("title"); + int price = resultSet.getObject("price", Integer.class); + Book book = new Book(); + book.setId(id); + book.setPrice(price); + book.setTitle(title); + return book; + } + } catch (SQLException e) { + throw new RuntimeException("Cannot create a connection to the DB", e); + } + return null; + } + + @Override + public Optional findById(Long id) { + return Optional.empty(); + } + + @Override + public Book update(Book book) { + return null; + } + + @Override + public boolean delete(Book book) { + return false; + } +} diff --git a/src/main/resources/init_db.sql b/src/main/resources/init_db.sql new file mode 100644 index 00000000..9a4444b4 --- /dev/null +++ b/src/main/resources/init_db.sql @@ -0,0 +1,10 @@ +SELECT * FROM books; + +INSERT INTO books (id, title, price) VALUE (1,'Harry Potter', 25); + + +UPDATE books SET title = 'Harry Potter' WHERE id = 1; + +DELETE FROM books WHERE id = 5; + +