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