diff --git a/src/main/java/mate/jdbc/Main.java b/src/main/java/mate/jdbc/Main.java index cb1717f..77c6fd9 100644 --- a/src/main/java/mate/jdbc/Main.java +++ b/src/main/java/mate/jdbc/Main.java @@ -1,7 +1,30 @@ package mate.jdbc; +import mate.jdbc.dao.ManufacturerDao; +import mate.jdbc.dao.ManufacturerDaoImpl; +import mate.jdbc.model.Manufacturer; + public class Main { + public static void main(String[] args) { + ManufacturerDao manufacturerDao = new ManufacturerDaoImpl(); + Manufacturer manufacturer1 = new Manufacturer(null, "Lincoln", "USA"); + Manufacturer manufacturer2 = new Manufacturer(null, "Ford", "USA"); + Manufacturer manufacturer3 = new Manufacturer(null, "Audi", "Germany"); + Manufacturer manufacturer4 = new Manufacturer(null, "BMW", "Germany"); + manufacturerDao.create(manufacturer1); + manufacturerDao.create(manufacturer2); + manufacturerDao.create(manufacturer3); + manufacturerDao.create(manufacturer4); + + manufacturerDao.delete(16L); + manufacturerDao.delete(22L); + manufacturerDao.delete(24L); + manufacturerDao.delete(27L); + + System.out.println(manufacturerDao.get(23L)); + manufacturerDao.update(new Manufacturer(23L, "Volkswagen", "Germany")); + System.out.println(manufacturerDao.get(23L)); } } diff --git a/src/main/java/mate/jdbc/dao/ManufacturerDao.java b/src/main/java/mate/jdbc/dao/ManufacturerDao.java new file mode 100644 index 0000000..918f2ec --- /dev/null +++ b/src/main/java/mate/jdbc/dao/ManufacturerDao.java @@ -0,0 +1,16 @@ +package mate.jdbc.dao; + +import java.util.List; +import mate.jdbc.model.Manufacturer; + +public interface ManufacturerDao { + Manufacturer create(Manufacturer manufacturer); + + Manufacturer get(Long id); + + List getAll() throws RuntimeException; + + Manufacturer update(Manufacturer manufacturer); + + void delete(Long id); +} diff --git a/src/main/java/mate/jdbc/dao/ManufacturerDaoImpl.java b/src/main/java/mate/jdbc/dao/ManufacturerDaoImpl.java new file mode 100644 index 0000000..3db6cb7 --- /dev/null +++ b/src/main/java/mate/jdbc/dao/ManufacturerDaoImpl.java @@ -0,0 +1,111 @@ +package mate.jdbc.dao; + +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 mate.jdbc.lib.Dao; +import mate.jdbc.model.Manufacturer; +import mate.jdbc.util.ConnectionUtil; + +@Dao +public class ManufacturerDaoImpl implements ManufacturerDao { + @Override + public Manufacturer create(Manufacturer manufacturer) { + try (Connection connection = ConnectionUtil.getConnection(); + PreparedStatement createStatement = + connection.prepareStatement( + "INSERT INTO manufacturers(name, country) values(?,?);", + Statement.RETURN_GENERATED_KEYS)) { + createStatement.setString(1, manufacturer.getName()); + createStatement.setString(2, manufacturer.getCountry()); + ResultSet generatedKeys = createStatement.getGeneratedKeys(); + if (generatedKeys.next()) { + Long id = generatedKeys.getLong(1); + manufacturer.setId(id); + } + createStatement.executeUpdate(); + } catch (SQLException e) { + throw new RuntimeException("Error"); + } + return manufacturer; + } + + @Override + public Manufacturer get(Long id) { + Manufacturer manufacturer = new Manufacturer(); + String getManufacturerRequest = "SELECT * FROM manufacturers WHERE id = ?"; + try (Connection connection = ConnectionUtil.getConnection(); + PreparedStatement getStatement = + connection.prepareStatement(getManufacturerRequest)) { + getStatement.setLong(1, id); + ResultSet resultSet = getStatement.executeQuery(); + if (resultSet.next()) { + Long idOfManufacturer = resultSet.getLong("id"); + String name = resultSet.getString("name"); + String country = resultSet.getString("country"); + manufacturer = new Manufacturer(idOfManufacturer, name, country); + } + + } catch (SQLException e) { + throw new RuntimeException("Error"); + } + return manufacturer; + } + + @Override + public List getAll() throws RuntimeException { + List manufacturerList = new ArrayList<>(); + try (Connection connection = ConnectionUtil.getConnection(); + Statement getAllStatement = connection.createStatement()) { + ResultSet resultSet = getAllStatement + .executeQuery( + "SELECT manufacturers.id, manufacturers.name, manufacturers.country" + + " FROM manufacturers WHERE is_deleted = 0"); + while (resultSet.next()) { + String name = resultSet.getString("name"); + String country = resultSet.getString("country"); + Long id = resultSet.getObject("id", Long.class); + Manufacturer manufacturer = new Manufacturer(id, name, country); + manufacturerList.add(manufacturer); + } + } catch (SQLException e) { + throw new RuntimeException("Error"); + } + return manufacturerList; + } + + @Override + public void delete(Long id) { + String deleteRequest = "UPDATE manufacturers SET is_deleted = 1 where id = ?"; + try (Connection connection = ConnectionUtil.getConnection(); + PreparedStatement deleteStatement = + connection.prepareStatement( + deleteRequest, Statement.RETURN_GENERATED_KEYS)) { + deleteStatement.setLong(1, id); + deleteStatement.executeUpdate(); + } catch (SQLException e) { + throw new RuntimeException("Error"); + } + } + + @Override + public Manufacturer update(Manufacturer manufacturer) { + String updateRequest = "UPDATE manufacturers SET name = ?, country = ? WHERE id = ?"; + try (Connection connection = ConnectionUtil.getConnection(); + PreparedStatement updateStatement = + connection.prepareStatement( + updateRequest, Statement.RETURN_GENERATED_KEYS)) { + updateStatement.setString(1, manufacturer.getName()); + updateStatement.setString(2, manufacturer.getCountry()); + updateStatement.setLong(3, manufacturer.getId()); + updateStatement.executeUpdate(); + return new Manufacturer(); + } catch (SQLException e) { + throw new RuntimeException("Error"); + } + } +} diff --git a/src/main/java/mate/jdbc/model/Manufacturer.java b/src/main/java/mate/jdbc/model/Manufacturer.java new file mode 100644 index 0000000..2bfc4f2 --- /dev/null +++ b/src/main/java/mate/jdbc/model/Manufacturer.java @@ -0,0 +1,45 @@ +package mate.jdbc.model; + +public class Manufacturer { + private Long id; + private String name; + private String country; + + public Manufacturer() { + } + + public Manufacturer(String name, String country) { + this.name = name; + this.country = country; + } + + public Manufacturer(Long id, String name, String country) { + this.id = id; + this.name = name; + this.country = country; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } +} diff --git a/src/main/java/mate/jdbc/util/ConnectionUtil.java b/src/main/java/mate/jdbc/util/ConnectionUtil.java new file mode 100644 index 0000000..cc9547e --- /dev/null +++ b/src/main/java/mate/jdbc/util/ConnectionUtil.java @@ -0,0 +1,27 @@ +package mate.jdbc.util; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Properties; + +public class ConnectionUtil { + static { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + public static Connection getConnection() { + try { + Properties dbProperties = new Properties(); + dbProperties.put("user", "root"); + dbProperties.put("password", "1234567"); + return DriverManager.getConnection("jdbc:mysql://localhost:3306/taxi_db", dbProperties); + } catch (SQLException e) { + throw new RuntimeException("Can't create connection to db", e); + } + } +} diff --git a/src/main/resources/init_db.sql b/src/main/resources/init_db.sql new file mode 100644 index 0000000..be58313 --- /dev/null +++ b/src/main/resources/init_db.sql @@ -0,0 +1,9 @@ +CREATE DATABASE `taxi_db`; + +CREATE TABLE `manufacturers` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `country` varchar(255) DEFAULT NULL, + `is_deleted` tinyint NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3