diff --git a/.gitignore b/.gitignore
index 6bc0bfa..dd0a5e4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
-
+Secrets.java
# Created by https://www.gitignore.io/api/intellij
# Edit at https://www.gitignore.io/?templates=intellij
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index f006a55..c87e502 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -6,9 +6,11 @@
-
+
-
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
deleted file mode 100644
index ada92a5..0000000
--- a/.idea/encodings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 803a716..d30d09e 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,5 @@
-
-
-
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..5c77ca2
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ 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/jdbcdao.iml b/jdbcdao.iml
new file mode 100644
index 0000000..e42d504
--- /dev/null
+++ b/jdbcdao.iml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index d97c43d..23ee534 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,5 +14,10 @@
junit
4.10
+
+ mysql
+ mysql-connector-java
+ 8.0.18
+
\ No newline at end of file
diff --git a/src/main/java/daos/ConnectionFactory.java b/src/main/java/daos/ConnectionFactory.java
new file mode 100644
index 0000000..f39f0db
--- /dev/null
+++ b/src/main/java/daos/ConnectionFactory.java
@@ -0,0 +1,35 @@
+package daos;
+
+import com.mysql.cj.jdbc.Driver;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+//Connects to Database
+public class ConnectionFactory {
+
+ public static final String URL = Secrets.getURL();
+ public static final String USER = Secrets.getUSER();
+ public static final String PASS = Secrets.getPASS();
+
+ //Get a connection to database
+ public static Connection getConnection() {
+
+ try {
+ DriverManager.registerDriver(new Driver());
+ return DriverManager.getConnection(URL, USER, PASS);
+ } catch (SQLException ex) {
+ throw new RuntimeException("Error connecting to the database", ex);
+ }
+ }
+
+ //test Connection
+ public static void main(String[] args) {
+ Connection connection = ConnectionFactory.getConnection();
+ MovieDAO mdao = new MovieDAO();
+// for (int i = 7; i < 14; i++) {
+// mdao.delete(i);
+// }
+ }
+}
diff --git a/src/main/java/daos/DAO.java b/src/main/java/daos/DAO.java
new file mode 100644
index 0000000..ac0c0d0
--- /dev/null
+++ b/src/main/java/daos/DAO.java
@@ -0,0 +1,11 @@
+package daos;
+
+import java.util.Set;
+
+public interface DAO {
+ T findById(Integer id);
+ Set findAll();
+ Boolean update(Integer id, T object);
+ Boolean create(T object);
+ Boolean delete(Integer id);
+}
diff --git a/src/main/java/daos/DELETEME.txt b/src/main/java/daos/DELETEME.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/main/java/daos/DTO.java b/src/main/java/daos/DTO.java
new file mode 100644
index 0000000..8518b61
--- /dev/null
+++ b/src/main/java/daos/DTO.java
@@ -0,0 +1,5 @@
+package daos;
+
+public interface DTO {
+ int getId(T object);
+}
diff --git a/src/main/java/daos/MovieDAO.java b/src/main/java/daos/MovieDAO.java
new file mode 100644
index 0000000..c4618da
--- /dev/null
+++ b/src/main/java/daos/MovieDAO.java
@@ -0,0 +1,114 @@
+package daos;
+
+import models.Movie;
+
+import java.sql.*;
+import java.util.HashSet;
+import java.util.Set;
+
+public class MovieDAO implements DAO {
+
+ public Movie findById(Integer id) {
+ Connection conn = ConnectionFactory.getConnection();
+ try {
+ Statement stmt = conn.createStatement();
+ ResultSet rs = stmt.executeQuery("SELECT * FROM Movies WHERE id=" + id);
+
+ if (rs.next()) {
+ return extractMovieFromResultSet(rs);
+ }
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ }
+ return null;
+ }
+
+ public Set findAll() {
+ Connection conn = ConnectionFactory.getConnection();
+
+ try {
+ Statement stmt = conn.createStatement();
+ ResultSet rs = stmt.executeQuery("SELECT * FROM Movies");
+ Set movies = new HashSet();
+
+ while(rs.next())
+ {
+ Movie movie = extractMovieFromResultSet(rs);
+
+ movies.add(movie);
+ }
+ return movies;
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ }
+ return null;
+ }
+
+ public Boolean update(Integer id, Movie movie) {
+ Connection conn = ConnectionFactory.getConnection();
+
+ try{
+ PreparedStatement ps = conn.prepareStatement("UPDATE Movies SET title=?, runtime=?, imdbscore=?, releaseyear=? WHERE id=?;");
+ ps.setString(1, movie.getTitle());
+ ps.setInt(2, movie.getRuntime());
+ ps.setInt(3, movie.getImdbscore());
+ ps.setInt(4, movie.getReleaseyear());
+ ps.setInt(5, id);
+ int i = ps.executeUpdate();
+
+ if(i == 1) {
+ return true;
+ }
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ }
+ return false;
+ }
+
+ public Boolean create(Movie movie) {
+ Connection conn = ConnectionFactory.getConnection();
+
+ try {
+ PreparedStatement ps = conn.prepareStatement("INSERT INTO Movies VALUES (NULL, ?, ?, ?, ?);");
+ ps.setString(1, movie.getTitle());
+ ps.setInt(2, movie.getRuntime());
+ ps.setInt(3, movie.getImdbscore());
+ ps.setInt(4, movie.getReleaseyear());
+ int i = ps.executeUpdate();
+
+ if(i == 1) {
+ return true;
+ }
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ }
+ return false;
+ }
+
+ public Boolean delete(Integer id) {
+ Connection conn = ConnectionFactory.getConnection();
+
+ try {
+
+ Statement stmt = conn.createStatement();
+ int i = stmt.executeUpdate("DELETE FROM Movies WHERE id=" + id);
+
+ if(i == 1) {
+ return true;
+ }
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ }
+ return false;
+ }
+
+ private Movie extractMovieFromResultSet(ResultSet rs) throws SQLException {
+ Movie movie = new Movie();
+ movie.setId( rs.getInt("id") );
+ movie.setTitle( rs.getString("title") );
+ movie.setRuntime( rs.getInt("runtime") );
+ movie.setImdbscore( rs.getInt("imdbscore") );
+ movie.setReleaseyear( rs.getInt("releaseyear") );
+ return movie;
+ }
+}
diff --git a/src/main/java/daos/MovieDTO.java b/src/main/java/daos/MovieDTO.java
new file mode 100644
index 0000000..af51444
--- /dev/null
+++ b/src/main/java/daos/MovieDTO.java
@@ -0,0 +1,26 @@
+package daos;
+
+import models.Movie;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+public class MovieDTO implements DTO {
+ public int getId(Movie movie) {
+ return movie.getId();
+ }
+
+ public static Integer getIdOfLast(){
+ Connection conn = ConnectionFactory.getConnection();
+
+ try{
+ Statement statement = conn.createStatement();
+ ResultSet rs = statement.executeQuery("SELECT id FROM Movies ORDER BY id DESC LIMIT 1;");
+ if(rs.next()) return rs.getInt("id");
+ }catch (SQLException ex){
+ ex.printStackTrace();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/models/DELETEME.txt b/src/main/java/models/DELETEME.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/main/java/models/Movie.java b/src/main/java/models/Movie.java
new file mode 100644
index 0000000..bdd2c2c
--- /dev/null
+++ b/src/main/java/models/Movie.java
@@ -0,0 +1,72 @@
+package models;
+
+public class Movie {
+ Integer id;
+ String title;
+ Integer runtime;
+ Integer imdbscore;
+ Integer releaseyear;
+
+ public Movie(String title, Integer runtime, Integer imdbscore, Integer releaseyear){
+ this.title = title;
+ this.runtime = runtime;
+ this.imdbscore = imdbscore;
+ this.releaseyear = releaseyear;
+ }
+
+ public Movie(Integer id, String title, Integer runtime, Integer imdbscore, Integer releaseyear){
+ this.id = id;
+ this.title = title;
+ this.runtime = runtime;
+ this.imdbscore = imdbscore;
+ this.releaseyear = releaseyear;
+ }
+
+ public Movie(){}
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public Integer getRuntime() {
+ return runtime;
+ }
+
+ public void setRuntime(Integer runtime) {
+ this.runtime = runtime;
+ }
+
+ public Integer getImdbscore() {
+ return imdbscore;
+ }
+
+ public void setImdbscore(Integer imdbscore) {
+ this.imdbscore = imdbscore;
+ }
+
+ public Integer getReleaseyear() {
+ return releaseyear;
+ }
+
+ public void setReleaseyear(Integer releaseyear) {
+ this.releaseyear = releaseyear;
+ }
+
+ @Override
+ public String toString(){
+ return String.format("%s | %s | %s | %s",
+ this.getTitle(), this.getRuntime(), this.getImdbscore(), this.getReleaseyear());
+ }
+}
diff --git a/src/test/java/daos/DELETEME.txt b/src/test/java/daos/DELETEME.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/test/java/daos/TestMovieDao.java b/src/test/java/daos/TestMovieDao.java
new file mode 100644
index 0000000..c7ee3ad
--- /dev/null
+++ b/src/test/java/daos/TestMovieDao.java
@@ -0,0 +1,54 @@
+package daos;
+
+import models.Movie;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestMovieDao {
+ private MovieDAO mdao = new MovieDAO();
+ private Movie movie1 = new Movie("Jumanji", 104, 7, 1995);
+ private Movie movie2 = new Movie("Bad Boys II", 147, 6, 2003);
+
+ @Test
+ public void testFindById() {
+ String expected = "Corpse Bride | 120 | 7 | 2005";
+ String actual = mdao.findById(1).toString();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testFindAll() {
+ Integer expected = 6;
+ Integer actual = mdao.findAll().size();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testUpdate() {
+ Assert.assertTrue(mdao.create(movie1));
+ Integer id = MovieDTO.getIdOfLast();
+ mdao.update(id, movie2);
+ String expected = movie2.toString();
+ String actual = mdao.findById(id).toString();
+ Assert.assertEquals(expected, actual);
+ mdao.delete(id);
+ }
+
+ @Test
+ public void testCreate(){
+ Assert.assertTrue(mdao.create(movie1));
+ Integer id = MovieDTO.getIdOfLast();
+ String expected = "Jumanji | 104 | 7 | 1995";
+ String actual = mdao.findById(id).toString();
+ Assert.assertEquals(expected, actual);
+ mdao.delete(id);
+ }
+
+ @Test
+ public void testDelete() {
+ Assert.assertTrue(mdao.create(movie1));
+ Integer id = MovieDTO.getIdOfLast();
+ Assert.assertTrue(mdao.delete(id));
+ Assert.assertEquals(6, mdao.findAll().size());
+ }
+}
diff --git a/src/test/java/models/DELETEME.txt b/src/test/java/models/DELETEME.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/target/classes/daos/ConnectionFactory.class b/target/classes/daos/ConnectionFactory.class
new file mode 100644
index 0000000..120e42d
Binary files /dev/null and b/target/classes/daos/ConnectionFactory.class differ
diff --git a/target/classes/daos/DAO.class b/target/classes/daos/DAO.class
new file mode 100644
index 0000000..9aa4a6c
Binary files /dev/null and b/target/classes/daos/DAO.class differ
diff --git a/target/classes/daos/DTO.class b/target/classes/daos/DTO.class
new file mode 100644
index 0000000..5912ed5
Binary files /dev/null and b/target/classes/daos/DTO.class differ
diff --git a/target/classes/daos/MovieDAO.class b/target/classes/daos/MovieDAO.class
new file mode 100644
index 0000000..9a287ad
Binary files /dev/null and b/target/classes/daos/MovieDAO.class differ
diff --git a/target/classes/daos/MovieDTO.class b/target/classes/daos/MovieDTO.class
new file mode 100644
index 0000000..2feba7c
Binary files /dev/null and b/target/classes/daos/MovieDTO.class differ
diff --git a/target/classes/daos/Secrets.class b/target/classes/daos/Secrets.class
new file mode 100644
index 0000000..65cd693
Binary files /dev/null and b/target/classes/daos/Secrets.class differ
diff --git a/target/classes/models/Movie.class b/target/classes/models/Movie.class
new file mode 100644
index 0000000..3865fb0
Binary files /dev/null and b/target/classes/models/Movie.class differ
diff --git a/target/test-classes/daos/TestMovieDao.class b/target/test-classes/daos/TestMovieDao.class
new file mode 100644
index 0000000..b2cd156
Binary files /dev/null and b/target/test-classes/daos/TestMovieDao.class differ