diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index f006a55..5a76f28 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -6,6 +6,7 @@
+
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..712ab9d
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jdbc-dao.iml b/jdbc-dao.iml
index 78b2cc5..cc83370 100644
--- a/jdbc-dao.iml
+++ b/jdbc-dao.iml
@@ -1,2 +1,3 @@
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index d97c43d..4929175 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,11 +8,23 @@
jdbcdao
1.0-SNAPSHOT
+
+ 1.8
+ 1.8
+
+
junit
junit
4.10
+
+ mysql
+ mysql-connector-java
+ 8.0.25
+
+
+
\ No newline at end of file
diff --git a/src/main/java/MainExecutor.java b/src/main/java/MainExecutor.java
new file mode 100644
index 0000000..69321a1
--- /dev/null
+++ b/src/main/java/MainExecutor.java
@@ -0,0 +1,70 @@
+import daos.CarDao;
+import models.Car;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.List;
+
+public class MainExecutor {
+
+ public static final String URL = "jdbc:mysql://localhost:3306/zipcode";
+ public static final String USER = "keer";
+ public static final String PASS = "keer123";
+
+ public static void main(String[] args) {
+
+// try {
+// Class.forName("com.mysql.jdbc.driver");
+// }
+// catch (ClassNotFoundException e) {
+// e.printStackTrace();
+// }
+ //TRY RESOURCE METHOD
+ try (Connection connection = DriverManager.getConnection(URL, USER, PASS)){
+
+ CarDao carDao = new CarDao(connection);
+
+ List cars = carDao.findAll();
+ int noOfCars = cars.size();
+ System.out.println("No of Cars available in database: " + noOfCars);
+ cars.forEach(System.out::println);
+
+ Car foundCar = carDao.findById(cars.get(1).getId());
+ System.out.println("Find Car by ID : " + cars.get(1).getId() + " => Model: " + foundCar.getMake() + " Make: " + foundCar.getModel() + " VIN: " + foundCar.getVin());
+
+ Car newCar = getCar(++noOfCars, "Audi", "R8", 2020, "yellow", 154323456);
+ Car createdCar = carDao.create(newCar);
+ System.out.println("New Car created ID : " + createdCar.getId() + " => Model: " + createdCar.getMake() + " Make: " + createdCar.getModel() + " VIN: " + createdCar.getVin());
+
+ foundCar.setVin(foundCar.getVin()+100);
+ Car updatedCar = carDao.update(foundCar);
+ System.out.println("Updated Car ID : " + updatedCar.getId() + " => Model: " + updatedCar.getMake() + " Make: " + updatedCar.getModel() + " VIN: " + updatedCar.getVin());
+
+ List carsBeforeDelete = carDao.findAll();
+ int noOfCarsBeforeDelete = carsBeforeDelete.size();
+ System.out.println("No of Cars available before delete operation: " + noOfCarsBeforeDelete);
+
+ carDao.delete(noOfCars);
+ System.out.println("Successfully deleted car. ID: " + noOfCars);
+
+ List carsAfterDelete = carDao.findAll();
+ int noOfCarsAfterDelete = carsAfterDelete.size();
+ System.out.println("No of Cars available after delete operation: " + noOfCarsAfterDelete);
+
+ } catch (SQLException ex) {
+ throw new RuntimeException("Error connecting to the database", ex);
+ }
+ }
+
+ public static Car getCar(int id, String make, String model, int year, String color, long vin) {
+ Car car = new Car();
+ car.setId(id);
+ car.setModel(model);
+ car.setMake(make);
+ car.setYear(year);
+ car.setColor(color);
+ car.setVin(vin);
+ return car;
+ }
+}
diff --git a/src/main/java/daos/BaseDao.java b/src/main/java/daos/BaseDao.java
new file mode 100644
index 0000000..4a04cc7
--- /dev/null
+++ b/src/main/java/daos/BaseDao.java
@@ -0,0 +1,12 @@
+package daos;
+
+import java.util.List;
+
+public abstract class BaseDao {
+
+ public abstract T findById(int id);
+ public abstract List findAll();
+ public abstract T update(T dto);
+ public abstract T create(T dto);
+ public abstract void delete(int id);
+}
diff --git a/src/main/java/daos/CarDao.java b/src/main/java/daos/CarDao.java
new file mode 100644
index 0000000..9b18786
--- /dev/null
+++ b/src/main/java/daos/CarDao.java
@@ -0,0 +1,144 @@
+package daos;
+
+import models.Car;
+import models.Car;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class CarDao extends BaseDao {
+
+ private Connection connection;
+
+ public CarDao(Connection connection) {
+ this.connection = connection;
+ }
+
+ /**
+ * This method is used to find Car by id
+ * @param id
+ * @return Car
+ */
+ public Car findById(int id) {
+
+ Car car = null;
+ try (PreparedStatement ps = connection.prepareStatement("Select id,make,model,year,color,vin from Car where id = ?")) {
+
+ ps.setInt(1, id);
+
+ ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+
+ car = new Car();
+ car.setId(rs.getInt(1));
+ car.setMake(rs.getString(2));
+ car.setModel(rs.getString(3));
+ car.setYear(rs.getInt(4));
+ car.setColor(rs.getString(5));
+ car.setVin(rs.getLong(6));
+ }
+
+ } catch (SQLException sqlException) {
+ sqlException.printStackTrace();
+ }
+ return car;
+ }
+
+ /**
+ *
+ * @return
+ */
+ public List findAll() {
+ List carList = new ArrayList<>();
+ try (PreparedStatement ps = connection.prepareStatement("Select id,make,model,year,color,vin from Car order by id")) {
+
+ ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+
+ Car car = new Car();
+ car.setId(rs.getInt(1));
+ car.setMake(rs.getString(2));
+ car.setModel(rs.getString(3));
+ car.setYear(rs.getInt(4));
+ car.setColor(rs.getString(5));
+ car.setVin(rs.getLong(6));
+ carList.add(car);
+ }
+ } catch (SQLException sqlException) {
+ sqlException.printStackTrace();
+ }
+ return carList;
+ }
+
+ /**
+ *
+ * @param car
+ * @return
+ */
+ public Car update(Car car) {
+
+ try (PreparedStatement ps = connection.prepareStatement("update car set make=?,model=?,year=?,color=?,vin=? where id =?")) {
+
+ ps.setString(1, car.getMake());
+ ps.setString(2, car.getModel());
+ ps.setInt(3, car.getYear());
+ ps.setString(4, car.getColor());
+ ps.setLong(5, car.getVin());
+ ps.setInt(6, car.getId());
+
+ boolean status = ps.execute();
+ if (status) {
+ System.out.println("Successfully Updated Car Data");
+ }
+ } catch (SQLException sqlException) {
+ sqlException.printStackTrace();
+ }
+ return car;
+ }
+
+ /**
+ *
+ * @param car
+ * @return
+ */
+ public Car create(Car car) {
+
+ try (PreparedStatement ps = connection.prepareStatement("insert into Car(id,make,model,year,color,vin) values(?,?,?,?,?,?)")) {
+
+
+ ps.setInt(1, car.getId());
+ ps.setString(2, car.getMake());
+ ps.setString(3, car.getModel());
+ ps.setInt(4, car.getYear());
+ ps.setString(5, car.getColor());
+ ps.setLong(6, car.getVin());
+
+ boolean status = ps.execute();
+ if (status) {
+ System.out.println("Successfully Inserted Car Data");
+ }
+ } catch (SQLException sqlException) {
+ sqlException.printStackTrace();
+ }
+ return car;
+ }
+
+ /**
+ *
+ * @param id
+ */
+ public void delete(int id) {
+ try (PreparedStatement ps = connection.prepareStatement("delete from car where id = ?")) {
+
+ ps.setInt(1, id);
+
+ boolean status = ps.execute();
+ if (status) {
+ System.out.println("Successfully Delete Car Data");
+ }
+ } catch (SQLException sqlException) {
+ sqlException.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/models/BaseModel.java b/src/main/java/models/BaseModel.java
new file mode 100644
index 0000000..7e20643
--- /dev/null
+++ b/src/main/java/models/BaseModel.java
@@ -0,0 +1,6 @@
+package models;
+
+public interface BaseModel {
+
+ int getId();
+}
diff --git a/src/main/java/models/Car.java b/src/main/java/models/Car.java
new file mode 100644
index 0000000..1efe2d3
--- /dev/null
+++ b/src/main/java/models/Car.java
@@ -0,0 +1,65 @@
+package models;
+
+public class Car implements BaseModel {
+
+ int id;
+ String make;
+ String model;
+ String color;
+ int year;
+ long vin;
+
+ @Override
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getMake() {
+ return make;
+ }
+
+ public void setMake(String make) {
+ this.make = make;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ public int getYear() {
+ return year;
+ }
+
+ public void setYear(int year) {
+ this.year = year;
+ }
+
+ public long getVin() {
+ return vin;
+ }
+
+ public void setVin(long vin) {
+ this.vin = vin;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("Car {id: %s, make: %s, model: %s, year: %s, color: %s, vin: %s}", id, make, model, year, color, vin);
+ }
+}
diff --git a/target/classes/MainExecutor.class b/target/classes/MainExecutor.class
new file mode 100644
index 0000000..2c218ad
Binary files /dev/null and b/target/classes/MainExecutor.class differ
diff --git a/target/classes/daos/BaseDao.class b/target/classes/daos/BaseDao.class
new file mode 100644
index 0000000..0409070
Binary files /dev/null and b/target/classes/daos/BaseDao.class differ
diff --git a/target/classes/daos/CarDao.class b/target/classes/daos/CarDao.class
new file mode 100644
index 0000000..67faeb4
Binary files /dev/null and b/target/classes/daos/CarDao.class differ
diff --git a/target/classes/models/BaseModel.class b/target/classes/models/BaseModel.class
new file mode 100644
index 0000000..d17c675
Binary files /dev/null and b/target/classes/models/BaseModel.class differ
diff --git a/target/classes/models/Car.class b/target/classes/models/Car.class
new file mode 100644
index 0000000..57e9e30
Binary files /dev/null and b/target/classes/models/Car.class differ
diff --git a/target/jdbcdao-1.0-SNAPSHOT.jar b/target/jdbcdao-1.0-SNAPSHOT.jar
new file mode 100644
index 0000000..a17d60e
Binary files /dev/null and b/target/jdbcdao-1.0-SNAPSHOT.jar differ
diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..bc38298
--- /dev/null
+++ b/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Tue Dec 07 20:29:51 EST 2021
+version=1.0-SNAPSHOT
+groupId=com.zipcoder.lab
+artifactId=jdbcdao
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..fd35807
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,5 @@
+daos/CarDao.class
+models/Car.class
+daos/BaseDao.class
+MainExecutor.class
+models/BaseModel.class
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..6e4cb93
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,5 @@
+/Users/keerthanasrinivasan/Documents/projects/Maven.JDBC-DAO/src/main/java/models/Car.java
+/Users/keerthanasrinivasan/Documents/projects/Maven.JDBC-DAO/src/main/java/daos/CarDao.java
+/Users/keerthanasrinivasan/Documents/projects/Maven.JDBC-DAO/src/main/java/daos/BaseDao.java
+/Users/keerthanasrinivasan/Documents/projects/Maven.JDBC-DAO/src/main/java/MainExecutor.java
+/Users/keerthanasrinivasan/Documents/projects/Maven.JDBC-DAO/src/main/java/models/BaseModel.java
diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
new file mode 100644
index 0000000..e69de29