From c3fe6c9292ecdc25c119be72c7747ef56cc52804 Mon Sep 17 00:00:00 2001 From: wes Date: Sat, 7 Dec 2019 15:38:08 -0500 Subject: [PATCH] complete --- .gitignore | 1 + .idea/compiler.xml | 1 + .idea/dataSources.xml | 19 +++ .idea/vcs.xml | 6 + pom.xml | 10 ++ src/main/java/MainApp.java | 12 ++ src/main/java/daos/ConnectionFactory.java | 27 +++++ src/main/java/daos/DAO.java | 12 ++ src/main/java/daos/DTO.java | 5 + src/main/java/daos/UserDao.java | 109 ++++++++++++++++++ src/main/java/daos/UserDto.java | 25 ++++ src/main/java/models/User.java | 85 ++++++++++++++ src/test/java/daos/TestConnectionFactory.java | 17 +++ src/test/java/daos/TestUserDao.java | 65 +++++++++++ target/classes/MainApp.class | Bin 0 -> 436 bytes target/classes/daos/ConnectionFactory.class | Bin 0 -> 1030 bytes target/classes/daos/DAO.class | Bin 0 -> 608 bytes target/classes/daos/DTO.class | Bin 0 -> 248 bytes target/classes/daos/UserDao.class | Bin 0 -> 5109 bytes target/classes/daos/UserDto.class | Bin 0 -> 1538 bytes target/classes/models/User.class | Bin 0 -> 2434 bytes .../daos/TestConnectionFactory.class | Bin 0 -> 766 bytes target/test-classes/daos/TestUserDao.class | Bin 0 -> 2620 bytes 23 files changed, 394 insertions(+) create mode 100644 .idea/dataSources.xml create mode 100644 .idea/vcs.xml create mode 100644 src/main/java/MainApp.java create mode 100644 src/main/java/daos/ConnectionFactory.java create mode 100644 src/main/java/daos/DAO.java create mode 100644 src/main/java/daos/DTO.java create mode 100644 src/main/java/daos/UserDao.java create mode 100644 src/main/java/daos/UserDto.java create mode 100644 src/main/java/models/User.java create mode 100644 src/test/java/daos/TestConnectionFactory.java create mode 100644 src/test/java/daos/TestUserDao.java create mode 100644 target/classes/MainApp.class create mode 100644 target/classes/daos/ConnectionFactory.class create mode 100644 target/classes/daos/DAO.class create mode 100644 target/classes/daos/DTO.class create mode 100644 target/classes/daos/UserDao.class create mode 100644 target/classes/daos/UserDto.class create mode 100644 target/classes/models/User.class create mode 100644 target/test-classes/daos/TestConnectionFactory.class create mode 100644 target/test-classes/daos/TestUserDao.class diff --git a/.gitignore b/.gitignore index 6bc0bfa..d1f7f0c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +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..9067f44 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -7,6 +7,7 @@ + diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..1ed1051 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,19 @@ + + + + + mysql + true + com.mysql.jdbc.Driver + jdbc:mysql://localhost:3306/JdbcLabSchema + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index d97c43d..fa5e266 100644 --- a/pom.xml +++ b/pom.xml @@ -14,5 +14,15 @@ junit 4.10 + + com.h2database + h2 + 1.4.197 + + + mysql + mysql-connector-java + 8.0.18 + \ No newline at end of file diff --git a/src/main/java/MainApp.java b/src/main/java/MainApp.java new file mode 100644 index 0000000..b23c870 --- /dev/null +++ b/src/main/java/MainApp.java @@ -0,0 +1,12 @@ +import daos.UserDao; +import models.User; + +public class MainApp { + public static void main(String... args) { + UserDao userDao = new UserDao(); +// User user = userDao.findById(3); +// userDao.delete(13); +// userDao.delete(14); +// System.out.println(user.toString()); + } +} diff --git a/src/main/java/daos/ConnectionFactory.java b/src/main/java/daos/ConnectionFactory.java new file mode 100644 index 0000000..8f32ad0 --- /dev/null +++ b/src/main/java/daos/ConnectionFactory.java @@ -0,0 +1,27 @@ +package daos; + +import com.mysql.cj.jdbc.Driver; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class ConnectionFactory { + private static final String URL = Secrets.getURL(); + private static final String USER = Secrets.getUSER(); + private static final String PASS = Secrets.getPASS(); + + + 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); + } + } +// public static void main(String[] args) { +// Connection connection = ConnectionFactory.getConnection(); +// } +} + diff --git a/src/main/java/daos/DAO.java b/src/main/java/daos/DAO.java new file mode 100644 index 0000000..c2d4cf0 --- /dev/null +++ b/src/main/java/daos/DAO.java @@ -0,0 +1,12 @@ +package daos; + + +import java.util.Set; + +public interface DAO { + E findById(Integer id); + Set findAll(); + Boolean insert(E obj); + Boolean update(Integer id, E obj); + Boolean delete(Integer id); +} diff --git a/src/main/java/daos/DTO.java b/src/main/java/daos/DTO.java new file mode 100644 index 0000000..499279a --- /dev/null +++ b/src/main/java/daos/DTO.java @@ -0,0 +1,5 @@ +package daos; + +public interface DTO { + Integer getId(T obj); +} diff --git a/src/main/java/daos/UserDao.java b/src/main/java/daos/UserDao.java new file mode 100644 index 0000000..3c685cd --- /dev/null +++ b/src/main/java/daos/UserDao.java @@ -0,0 +1,109 @@ +package daos; + +import models.User; + +import java.sql.*; +import java.util.HashSet; +import java.util.Set; + +public class UserDao implements DAO { + + public User findById(Integer id) { + Connection connection = ConnectionFactory.getConnection(); + + try { + String query = "SELECT * FROM Users WHERE id = " + id + ";"; + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + if (resultSet.next()) return extractUserFromResultSet(resultSet); + + } catch(SQLException e) { + e.printStackTrace(); + } + + return null; + } + + public Set findAll() { + Connection connection = ConnectionFactory.getConnection(); + try { + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery("SELECT * FROM Users;"); + Set users = new HashSet(); + while(resultSet.next()) + { + User user = extractUserFromResultSet(resultSet); + users.add(user); + } + return users; + } catch (SQLException ex) { + ex.printStackTrace(); + } + return null; + } + + public Boolean insert(User user) { + Connection connection = ConnectionFactory.getConnection(); + try { + PreparedStatement ps = connection.prepareStatement("INSERT INTO Users VALUES (NULL, ?, ?, ?, ?, ?);"); + ps = prepareUserForImport(ps, user); + + int i = ps.executeUpdate(); + if(i == 1) return true; + + } catch (SQLException ex) { + ex.printStackTrace(); + } + return false; + } + + public Boolean update(Integer id, User user) { + Connection connection = ConnectionFactory.getConnection(); + try { + PreparedStatement ps = connection.prepareStatement("UPDATE Users SET first_name=?, last_name=?, fav_color=?, job=?, birthdate=? WHERE id=?;"); + ps = prepareUserForImport(ps, user); + ps.setInt(6, id); + + int i = ps.executeUpdate(); + if(i == 1) return true; + } catch (SQLException ex) { + ex.printStackTrace(); + } + return false; + } + + public Boolean delete(Integer id) { + Connection connection = ConnectionFactory.getConnection(); + try { + Statement statement = connection.createStatement(); + int i = statement.executeUpdate("DELETE FROM Users WHERE id=" + id + ";"); + if(i == 1) { + return true; + } + } catch (SQLException ex) { + ex.printStackTrace(); + } + return false; + } + + private User extractUserFromResultSet(ResultSet rs) throws SQLException { + User user = new User(); + user.setId( rs.getInt("id") ); + user.setFirstName( rs.getString("first_name") ); + user.setLastName( rs.getString("last_name") ); + user.setFavColor( rs.getString("fav_color") ); + user.setJob( rs.getString("job") ); + user.setBirthday( rs.getDate("birthdate") ); + return user; + } + + private PreparedStatement prepareUserForImport(PreparedStatement ps, User user) throws SQLException { + ps.setString(1, user.getFirstName()); + ps.setString(2, user.getLastName()); + ps.setString(3, user.getFavColor()); + ps.setString(4, user.getJob()); + ps.setDate(5, new java.sql.Date(user.getBirthday().getTime())); + return ps; + } +} diff --git a/src/main/java/daos/UserDto.java b/src/main/java/daos/UserDto.java new file mode 100644 index 0000000..73be789 --- /dev/null +++ b/src/main/java/daos/UserDto.java @@ -0,0 +1,25 @@ +package daos; + +import models.User; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +public class UserDto implements DTO { + public Integer getId(User user) { + return user.getId(); + } + public static Integer getLastIdOfLast() { + Connection connection = ConnectionFactory.getConnection(); + try { + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery("SELECT id FROM Users ORDER BY id DESC LIMIT 1;"); + if (resultSet.next()) return resultSet.getInt("id"); + } catch (SQLException ex) { + ex.printStackTrace(); + } + return null; + } +} diff --git a/src/main/java/models/User.java b/src/main/java/models/User.java new file mode 100644 index 0000000..ccf510f --- /dev/null +++ b/src/main/java/models/User.java @@ -0,0 +1,85 @@ +package models; + +import java.util.Date; + +public class User { + private Integer id; + private String firstName; + private String lastName; + private String favColor; + private Date birthday; + private String job; + + public User() {} + + public User(String firstName, String lastName, String favColor, Date birthday, String job) { + this.firstName = firstName; + this.lastName = lastName; + this.favColor = favColor; + this.birthday = birthday; + this.job = job; + } + + public User(Integer id, String firstName, String lastName, String favColor, Date birthday, String job) { + this.id = id; + this.firstName = firstName; + this.lastName = lastName; + this.favColor = favColor; + this.birthday = birthday; + this.job = job; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getFavColor() { + return favColor; + } + + public void setFavColor(String favColor) { + this.favColor = favColor; + } + + public Date getBirthday() { + return birthday; + } + + public void setBirthday(Date birthday) { + this.birthday = birthday; + } + + public String getJob() { + return job; + } + + public void setJob(String job) { + this.job = job; + } + + @Override + public String toString() { + return String.format("%s %s\t|\t%s\t|\t%s\t|\t%s", + this.getFirstName(), this.getLastName(), this.getFavColor(), this.getJob(), this.getBirthday()); + } +} diff --git a/src/test/java/daos/TestConnectionFactory.java b/src/test/java/daos/TestConnectionFactory.java new file mode 100644 index 0000000..a966a7d --- /dev/null +++ b/src/test/java/daos/TestConnectionFactory.java @@ -0,0 +1,17 @@ +package daos; + +import org.junit.Test; + +import static org.junit.Assert.fail; + +public class TestConnectionFactory { + @Test + public void testGetConnection() { + try { + ConnectionFactory.getConnection(); + } catch( RuntimeException rte) { + fail("Could not connect to MySQL database"); + } + + } +} diff --git a/src/test/java/daos/TestUserDao.java b/src/test/java/daos/TestUserDao.java new file mode 100644 index 0000000..4847d2e --- /dev/null +++ b/src/test/java/daos/TestUserDao.java @@ -0,0 +1,65 @@ +package daos; + +import models.User; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.sql.Connection; +import java.util.Date; + +public class TestUserDao { + UserDao userDao = new UserDao(); + User user1 = new User("testy","test","testeroon", new Date(2000,12,25), "tester"); + User user2 = new User("Mr. Testy","Test","testeroon", new Date(1900,12,25), "tester"); + + + + @Test + public void testFindById() { + String actual = userDao.findById(1).toString(); + String expected = "Wes Jones\t|\tblue\t|\tzipcoder\t|\t1997-08-05"; + Assert.assertEquals(expected, actual); + } + + @Test + public void testFindAll() { + Integer actual = userDao.findAll().size(); + Integer expected = 6; + Assert.assertEquals(expected, actual); + } + + @Test + public void testInsert() { + Assert.assertTrue(userDao.insert(user1)); + Integer id = lastId(); + String actual = userDao.findById(id).toString(); + String expected = "testy test\t|\ttesteroon\t|\ttester\t|\t3901-01-25"; + Assert.assertEquals(expected, actual); + userDao.delete(id); + + } + + @Test + public void testUpdate() { + Assert.assertTrue(userDao.insert(user1)); + Integer id = lastId(); + userDao.update(id, user2); + String actual = userDao.findById(id).toString(); + String expected = "Mr. Testy Test\t|\ttesteroon\t|\ttester\t|\t3801-01-25"; + Assert.assertEquals(expected, actual); + userDao.delete(id); + } + + @Test + public void testDelete() { + Assert.assertTrue(userDao.insert(user1)); + Integer id = lastId(); + Assert.assertTrue(userDao.delete(id)); + Assert.assertEquals(6, userDao.findAll().size()); + } + + private Integer lastId() { + return UserDto.getLastIdOfLast(); + } +} diff --git a/target/classes/MainApp.class b/target/classes/MainApp.class new file mode 100644 index 0000000000000000000000000000000000000000..69e6e8fd86184918cd77460a8d3d24416b0921c7 GIT binary patch literal 436 zcmZutyH3ME5S(+I_(4cQ00Sjmpui1X5K;u9GEf8}A*xGanTrxT@`HcibEqPL#0T(E zh`HEOD7a#GXKrV9wckGkgA5orE_^FVn2%o#_!xG+>eYE1*@? zBGB3FaX+4glN`q|c?$gu@B*+HZ6cppFxO945bx`6hq19HO}MO^WdpWY0dLqwi;NZz oXl5`wpD>IP4vJq``h-@0{pv%a!5F6P01-YJ4XaE2J literal 0 HcmV?d00001 diff --git a/target/classes/daos/ConnectionFactory.class b/target/classes/daos/ConnectionFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..df10136fda5aafd1d1bb1b55d53ae1be91a701a8 GIT binary patch literal 1030 zcmaJ=TT|0O6#ll9CWLY^P(Zu|@zSCa6hsFcXB;dK8oUr-hR1EX)26lwZng;iDt&^H z8GZLhIi5``?F{Nec5}Wx=ljlO_vf!~-vO*()xs#|4cxMj!MugrxMSe1iK2;;i3JVZ zGjQL)0~3oDhT$4mVi?%n_84rh!4J9HX3D93_fJYL7SDf+4%>m$zwq z_rmuXa?ipjRL_Z_SlT0WBd(Iqm={LkO}kYQa)(!%gxFpj@a7(up|-nVR@K9VVaBWS zIB`iQ5`hZiXp;vjmd9GWCR7h+m@bw&IVK;QeF5Z|5l3{~JM`as<)c6xXg*EkD;|8< z;s>cTb%4S0Zx?q7j-Z4m_&gx4C0pCI@Y2=!);V6f%{U1he8^7n8zb5 z6T#nWU?^$#wKRCmb(^{k^*B*$%galv?khU;c*PIuqQ$9wGL99)(C6?VphiAD%l8Jx0|v2=oNTcetzVn@}5Q{{?Rcp`Lhj~T{$ByTGX zngA7ZuGcAZi$}aBB*Ul_wJ=dac5sHtVz1>LY+c`jtuEYul`dYci^#vGyYPR$ow|%a z>5E0;n8P5w0bl^L7{fRiE|HZ%j%>TnHprgnvrY1$f>5A!iXvRv8SR4$CtzPwifLMN zDQIGb{_`CNTqY`Dh=z5Q5FOk=Ha&CBkl8=Mz$vnJ&NgiG6hmKLpJ904&J*v*kJM{| sWGzZq^V<{&O4*{nNlLIl>mRKGJ=klwPUko1qfB-TIK(hVRt7hJ0~}HJF8}}l literal 0 HcmV?d00001 diff --git a/target/classes/daos/DAO.class b/target/classes/daos/DAO.class new file mode 100644 index 0000000000000000000000000000000000000000..96d58c4a91fe431d0a8f8c289619716ce55b72a8 GIT binary patch literal 608 zcmZ{h-A=+V7>3^>Yyxmz0U?2i35f{@^9CxbOG(q2(V2K_9(Vy>l<^yo zNmxDW^R@5K_I>|+egU}0m5)mwU54OQnRxOsiy5x@(^9;PPz#fUGh<~Uv%$^IZ2q#8 z3p-$FMk+DF=9y&ZIaSY7dgd42W33rFeCv~2rNc-TCf)tnkVGT8@RV7}%%Q{xw^&#z+IJPLex2Lp)+PQwGnQHwncO9FC-C94Uu`q0ju=`|nr937 zs5C_c599e=u{S!#B3*^V4DG*7ZhoA{z)+*z1C2Vv0qVpJq8dD6A3@1Y;ua1|J|aHG TNy(?gZFJV!jl&tv*L3j{WyJ&XVV literal 0 HcmV?d00001 diff --git a/target/classes/daos/UserDao.class b/target/classes/daos/UserDao.class new file mode 100644 index 0000000000000000000000000000000000000000..f756fb081d11ea666d13baf7f8db09d7f89d660e GIT binary patch literal 5109 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 IN9$no4{GDFCjbBd literal 0 HcmV?d00001 diff --git a/target/test-classes/daos/TestUserDao.class b/target/test-classes/daos/TestUserDao.class new file mode 100644 index 0000000000000000000000000000000000000000..92eaa5ed6c64e40c1ac718c56691cd7796f308cf GIT binary patch literal 2620 zcma)8YgZFj6x|a-W(b3X6r)zO6kp*P9#TQ9Er_(CL0Um5+SdRB4h=JyOsrV@uB|_y zf1%&owQ8Vst^R<1>M!c*J~P8)M05${KF&S&?0xq==Z1g&`|EE2=kX|sGni0uC5ad& z8gLquDz0jn((sOkcU9z*Xu!0F_mZebK^$f@T+=Ws!}pW;0M}*foGj04xRJyH7RB;m zBbIPeMz@mq2p`MBCrNJlRKsUtHl$hBuu@MZ@{rW30FpqbSZB#$6*< zH0<@jEH}1R4VOprCX;5-lu4p!(3dWUvz-SA zn{z6q6?4iGRZ_wtICGzzOGh_)6zI`g&~X;$$TV^RycglLO~IvC&>)>zavYm?=m}JD ztzvGH1SOw z*PzO?YYH;i{K1K&t%b$W5#_g+x1IYcR&yPnx`NiHax<)=RINJ3%YL@&hBvr+hqcE7 zIu`}pshYZ%Cf9TS2MuSdp9`i^?$J zI7QR287iV)U}X6$`^yU=q8Iii%hW&0d`V34>`h^r;FIQ+Z8mzanu4{PsR1S`LER4@ zwC5!l*Jr1v1w2yZE}!1!b<-_)kH_qq^mv`G_!&Ofb^P!Jkhfdv*6UfP>{Tf8Ua;-u z>=7C{0MX7T<1N5^UV0sMlvWDBNJG3N;b0@&5rRp(!u` literal 0 HcmV?d00001