From 7284f355caefceafe7b1a7904f14d7b46402014c Mon Sep 17 00:00:00 2001 From: laura Date: Thu, 5 Aug 2021 14:44:33 -0400 Subject: [PATCH 1/2] pppoo --- .idea/compiler.xml | 1 + .idea/jarRepositories.xml | 20 ++++ .idea/vcs.xml | 6 + pom.xml | 37 ++++-- src/main/java/daos/CityRepository.java | 100 ++++++++++++++++ src/main/java/daos/Repo.java | 40 +++++++ src/main/java/models/City.java | 72 +++++++++++ src/main/java/models/MainApplication.java | 112 ++++++++++++++++++ .../java/resources/application.properties | 12 ++ target/classes/daos/CityRepository.class | Bin 0 -> 4370 bytes target/classes/daos/Repo.class | Bin 0 -> 1299 bytes target/classes/models/City.class | Bin 0 -> 2088 bytes target/classes/models/MainApplication.class | Bin 0 -> 4776 bytes 13 files changed, 391 insertions(+), 9 deletions(-) create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/vcs.xml create mode 100644 src/main/java/daos/CityRepository.java create mode 100644 src/main/java/daos/Repo.java create mode 100644 src/main/java/models/City.java create mode 100644 src/main/java/models/MainApplication.java create mode 100644 src/main/java/resources/application.properties create mode 100644 target/classes/daos/CityRepository.class create mode 100644 target/classes/daos/Repo.class create mode 100644 target/classes/models/City.class create mode 100644 target/classes/models/MainApplication.class 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/pom.xml b/pom.xml index d97c43d..2c16393 100644 --- a/pom.xml +++ b/pom.xml @@ -4,15 +4,34 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.zipcoder.lab - jdbcdao + org.example + intro-to-jdbc 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.0 + + 1.8 + 1.8 + + + + - - - junit - junit - 4.10 - - + + + + com.fasterxml.jackson.core + jackson-databind + 2.12.3 + + + mysql + mysql-connector-java + 8.0.18 + + \ No newline at end of file diff --git a/src/main/java/daos/CityRepository.java b/src/main/java/daos/CityRepository.java new file mode 100644 index 0000000..e516c61 --- /dev/null +++ b/src/main/java/daos/CityRepository.java @@ -0,0 +1,100 @@ +package daos; + +import models.City; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author git-leon + * @version 1.0.0 + * @date 8/4/21 3:05 PM + */ +public class CityRepository implements Repo { + private Connection connection; + + public CityRepository(Connection connection) { + this.connection = connection; + } + + @Override + public Connection getConnection() { + return connection; + } + + public void create(City city) { + executeStatement(String.format(new StringBuilder() + .append("INSERT INTO ciudades.city(") + .append("id, name, population, level) ") + .append("VALUES (%s, '%s', %s, %s);") + .toString(), + city.getId(), + city.getName(), + city.getPopulation(), + city.getLevel())); + } + + public List readAll() { + ResultSet resultSet = executeQuery("SELECT * FROM ciudades.city;"); + List list = new ArrayList<>(); + try { + while (resultSet.next()) { + String id = resultSet.getString(1); + String name = resultSet.getString(2); + String population = resultSet.getString(3); + String level = resultSet.getString(4); + list.add(new City( + Long.parseLong(id), + name, + Integer.parseInt(population), + Integer.parseInt(level))); + } + } catch (SQLException throwables) { + throw new RuntimeException(throwables); + } + return list; + } + + public City read(Long cityId) { + return readAll() + .stream() + .filter(City -> City.getId().equals(cityId)) + .findAny() + .get(); + } + + public void update(Long id, City newCityData) { + executeStatement(String.format(new StringBuilder() + .append("UPDATE ciudades.city SET ") + .append("name = '%s', ") + .append("population = '%s',") + .append("level = '%s' ") + .append("WHERE id = %s;") + .toString(), + + newCityData.getName(), + newCityData.getPopulation(), + newCityData.getLevel(), + id)); + + + } + + public void delete(Long id) { + executeStatement(String.format(new StringBuilder() + .append("DROP FROM ciudades.city ") + .append("WHERE id = %s;") + .toString(), + id)); + + } + + public void delete(City city) { + delete(city.getId()); + + } + +} diff --git a/src/main/java/daos/Repo.java b/src/main/java/daos/Repo.java new file mode 100644 index 0000000..787de0e --- /dev/null +++ b/src/main/java/daos/Repo.java @@ -0,0 +1,40 @@ +package daos; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +public interface Repo { + + default void executeStatement(String sqlStatement) { + try { + Statement statement = getScrollableStatement(); + statement.execute(sqlStatement); + } catch (SQLException e) { + throw new Error(e); + } + } + + default Statement getScrollableStatement() { + int resultSetType = ResultSet.TYPE_SCROLL_INSENSITIVE; + int resultSetConcurrency = ResultSet.CONCUR_READ_ONLY; + try { // scrollable statements can be iterated more than once without closing + return getConnection().createStatement(resultSetType, resultSetConcurrency); + } catch (SQLException e) { + throw new Error(e); + } + } + + default ResultSet executeQuery(String sqlQuery) { + try { + Statement statement = getScrollableStatement(); + return statement.executeQuery(sqlQuery); + } catch (SQLException e) { + throw new Error(e); + } + } + + Connection getConnection(); + +} diff --git a/src/main/java/models/City.java b/src/main/java/models/City.java new file mode 100644 index 0000000..b43f3ab --- /dev/null +++ b/src/main/java/models/City.java @@ -0,0 +1,72 @@ +package models; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * @author git-leon + * @version 1.0.0 + * @date 8/4/21 3:03 PM + */ +public class City { + private Long id; + private String name; + private int population; + private int level; + + public City() { + } + + public City(Long id, String name, int population, int level) { + this.id = id; + this.name = name; + this.population = population; + this.level = level; + } + + 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 int getPopulation() { + return population; + } + + public void setPopulation(int population) { + this.population = population; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + + @Override + public String toString() { + try { + return new ObjectMapper().writeValueAsString(this); + } catch (JsonProcessingException e) { + return "City{" + + "id=" + id + + ", name='" + name + '\'' + + ", population=" + population + + ", level=" + level + + '}'; + } + } +} diff --git a/src/main/java/models/MainApplication.java b/src/main/java/models/MainApplication.java new file mode 100644 index 0000000..b73515e --- /dev/null +++ b/src/main/java/models/MainApplication.java @@ -0,0 +1,112 @@ +package models; + +import com.mysql.cj.jdbc.Driver; +import daos.CityRepository; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.StringJoiner; + +/** + * @author git-leon + * @version 1.0.0 + * @date 8/2/21 9:49 AM + */ +public class MainApplication { + + public static void main(String[] args) { + registerJDBCDriver(); + Connection mysqlDbConnection = getConnection("mysql"); + CityRepository cityRepository = new CityRepository(mysqlDbConnection); + executeStatement(mysqlDbConnection, "DROP DATABASE IF EXISTS ciudades;"); + executeStatement(mysqlDbConnection, "CREATE DATABASE IF NOT EXISTS ciudades;"); + executeStatement(mysqlDbConnection, "USE ciudades;"); + executeStatement(mysqlDbConnection, new StringBuilder() + .append("CREATE TABLE IF NOT EXISTS ciudades.city(") + .append("id int auto_increment primary key,") + .append("name text not null,") + .append("population int not null,") + .append("level int null);") + .toString()); + + cityRepository.create(new City(12L, "Chicago", 3, 7)); + cityRepository.create(new City(13L, "New York", 3, 7)); + System.out.println(cityRepository.readAll()); + + } + + static ResultSet executeQuery(Connection connection, String sqlQuery) { + try { + Statement statement = getScrollableStatement(connection); + return statement.executeQuery(sqlQuery); + } catch (SQLException e) { + throw new Error(e); + } + } + + static void printResults(ResultSet resultSet) { + try { + for (int rowNumber = 0; resultSet.next(); rowNumber++) { + String firstColumnData = resultSet.getString(1); + String secondColumnData = resultSet.getString(2); + String thirdColumnData = resultSet.getString(3); + System.out.println(new StringJoiner("\n") + .add("Row number = " + rowNumber) + .add("First Column = " + firstColumnData) + .add("Second Column = " + secondColumnData) + .add("Third column = " + thirdColumnData)); + } + } catch (SQLException e) { + throw new Error(e); + } + } + + static void executeStatement(Connection connection, String sqlStatement) { + try { + Statement statement = getScrollableStatement(connection); + statement.execute(sqlStatement); + connection.setAutoCommit(false); + } catch (SQLException e) { + throw new Error(e); + } + } + + static Statement getScrollableStatement(Connection connection) { + int resultSetType = ResultSet.TYPE_SCROLL_INSENSITIVE; + int resultSetConcurrency = ResultSet.CONCUR_READ_ONLY; + try { // scrollable statements can be iterated more than once without closing + return connection.createStatement(resultSetType, resultSetConcurrency); + } catch (SQLException e) { + throw new Error(e); + } + } + + static Connection getConnection(String dbVendor) { + String username = "laura"; + String password = "zipcode0"; + String url = new StringBuilder() + .append("jdbc:") + .append(dbVendor) + .append("://127.0.0.1/") + .append("?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC") + .toString(); + try { + return DriverManager.getConnection(url, username, password); + } catch (SQLException e) { + throw new Error(e); + } + } + + static void registerJDBCDriver() { + // Attempt to register JDBC Driver + try { + DriverManager.registerDriver(Driver.class.newInstance()); + } catch (InstantiationException | IllegalAccessException | SQLException e1) { + throw new RuntimeException(e1); + } + } + +} diff --git a/src/main/java/resources/application.properties b/src/main/java/resources/application.properties new file mode 100644 index 0000000..2fbc9ce --- /dev/null +++ b/src/main/java/resources/application.properties @@ -0,0 +1,12 @@ +#spring.jpa.show-sql=true +#spring.jpa.hibernate.ddl-auto=create +#spring.datasource.continue-on-error=true +#spring.main.banner-mode=off +#logging.level.org.springframework=ERROR +#spring.datasource.driver-class-name=com.mysql.jdbc.Driver +#spring.datasource.url=jdbc:mysql://localhost:3306/testdb?allowPublicKeyRetrival=true&useSSL=false&serverTimezone=UTC +#//spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC +#spring.datasource.username=laura +#spring.datasource.password=zipcode0 +# hibernate.dialect=org.hibernate.dialect.MySQL8Dialect +#//spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect \ No newline at end of file diff --git a/target/classes/daos/CityRepository.class b/target/classes/daos/CityRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..3cb8835cda19135213b271a4c593a0eded884f93 GIT binary patch literal 4370 zcma)92YVFP6+N?B?d*<52!trY21ZyiY9Nf$Yyq(l0tBmqR)A$Y!K2-g7#PhiyR(!u zr}y5So{)qTC&95T1jIJ!iR1KM|46=+b7y87E1XE5-n@C`zH`q#_s-LE|GxGNfEVE( z8Z@L67(hmarJ(`oIOgOzAIHf!Z0Vj-aazNAIMOUg<7&tvC%rQo@+fFD;Kfmt=UEl! zG_)bzg!8x{&8t+rTElDbT4`P_b@wcLFrlUMmg(`BmEFk& zB5(q0gFd7*?b2AygaVa2GDD6-XeF~n&vpiqcERJ>5j!KGeI^{!ogYYfdE1@mOw=_O zc#@XO=8BFPP}b;JXDyo2yp#FtIq{Hgt*d}d9Z8OyPg^-zO%sW{RVX@M%JLMnRaQ-v zM&%TTIOtC>Ta9dOEt3~=B{nzTw02jG$9rhBIpvw@(_?1N=U>IAReXjzBA}E#@0wmQ zPscjy=%_ao74j5p4u#+ol+2Qzo|-cyFeHDJOG8I0D>+xpW&EHSb!KX;ND!M`>zwFg zpXr(0$p~8#?$vcWWpT4(F3e`kP664uL&5*D|A6S$7m1e27V~Lqzb%qoEn^iyZWk@+ zxEr6Y*;CA29bd$k zbbJ{XbzH(%RD4y(*YI^6kIBn7bbJ%v(s3D&E4V#1k{lVHHhPWyQxjvg2x-Y|y7OI}1z;rx|8%%QFo)nep zWT2-NKc5*Drjnv3A$!?ZF7`sEBnf8^Cltx8V zlH%bzH?25+aAa!4urnO$Dloa$@0*&KT!v6X$3u99j$aE4tCy*COh12Aq{hR`JeA7< z532-2;-H|RTZA4nb2-apc5SQ9gRoMCwX&*sh597cxR(u9vHq0Oy=oy>G_v+e-j<7F zb>^y^9QUiBl<3K-LP%Vr3RYEOI_i4XyyS#>)^v*2#GHb)-J{jm!WDvw#*#rHtx|Uh zXlyQVR;5#I>?@+ai ze)%Pb{!Vgwi;axV)@o1uZS_ozjtT`0W`+`|A*e(yJu6)UeB9He51;?djTJl=-vtG? zmDJ@Il3-LmrJNkp@EiPA?jpZqTyFYqOG)-DQTmQLw4v9&#kr#E-&zJH^H#=AGpOW0 zD9rUIGGXRy#}hS{G;}K?)o0YArjqAuH#6i?6KiX{oA5vHrb7fl68pwWqhymxxH;cK zI*H6WQ#74|ir?$_1OB4pl{lebOGU!Adp3L88c6z|HkLng&P>ZaNy>2LO~v16E1Aun zF6JoVQQqqE!;V=f$c5zjYAQo}K_NY8x*6VCI)jaa^?Ilpso6Nq>qqtS|9>(#@`d+S z>pQeOY&uTLW|&p{T|rkJKg;=}VABh)LkCr;fnwudM8594M<>|7n^%1WFXr2Rjz{>^ zdapp~?RyH5$N3h)OW3a9T_0GDC~xlxtien9wl-Lem*F11ai4Ehp|yK47}^}*Q{h}= z?~{mJW+yNg^9S2~GkUNfG^1b_c5_4kT|~@3;y~|pG|XH&u~t=@IGaTz)Tg1% zH1sW^DK!)2Lr={#^3lA66{(pRdo9vi!pcRgs(7;^44vbP7Y2QMd3MLynyNx;exsQd-o-qzMdtWI7>8)2^*>${4z z3LeFwzUWn~i(tI3(SP0>?TZDS#y&OZ#QLve{mix{v@c;pd$hfA3AeS!*j&NwSFtgI znnQOKyYBdq6}FJ z1J*|O+v(C~j#Z>=l!I&FIPT|Z3TE&?cf)worJ*ey+uG(;0?rQ|BQ?Dqv3 zPqA&G6It)0YeB1Ijft&c?QBvHEMpDPi!-2B`X`r(H*o~;jgod zp)4G=p{!@i`Z7lN6nvjm`W4%l`2c3Y%USx+Dc768KEP)OXkEHso(w> xH&$1d`)W){Jmn{WhyAo|fa$NF#h>|3_zOSh$4N=xYhK?;_n}}&Totf{O_j~90rr&;k`T}49%PI7un!*&OHOy$3?MDoA z8s^o0Erpx7rGmFL+|jTgFep!?*>z>ZHC%ZtEmvT;T0b&g8MT&S9n>1G)3gp2r*;Km zEB3w=$kdyb+~^+fNoU8{YjG!6w@st9YdB4{_BWHAo?`xwVCQ9vdVZZn0l~AyP-v^Z zdSc49+q5l4WA0(IBao`^8+NC*E!#FXb!r3>s`5Wh1=36~U#uH#&j~3A6b_`@Fde(q zQVv4`h3ZtuK*(F#k)3YKZAf?Lv`wF4O&}lat=N{?bsTA#rvyn`KEjt6*1mO*;pPsdeU)9^^gB9?SaV3Os6cJT4^ls5N{=sT zY#P!W2e^8RC_lj1^f`pU`s~a(A`v`&kM#Oy#GcK5MBmpBOa?N@dC3{hM-bGj3l{aBYki0ST4q3 zB^&*|l#TvarbmqlqvuFOakioS%_)D(Pk6HGF3Mg3eH`;VJk`LuV6EsIQa7*o zhGMKchRdE-3FDkaJZo8qUlfRHs1T5#OQ!HWa8v-_cuatD2w*aTvmQMrf~lDRUe3GK qI4@n{?gU*;2F`lW21C%w0kkr%1kmCTo3s-X>aDVdz;%uh-1rSN8W3v$ literal 0 HcmV?d00001 diff --git a/target/classes/models/City.class b/target/classes/models/City.class new file mode 100644 index 0000000000000000000000000000000000000000..ac96b2e83653245be4d17266df54a9a908483a78 GIT binary patch literal 2088 zcmaKtYi}D>5Qg7luP<@dZR%V~T^HO^8pm<#UJSIjNiQKSE^Zo<5{Zu+dkGuXUTeKB zMF@%C!e>4NiMSG#_yPPV#5=p&c;h%#q%-F-XU;P-uQ&hx_xC>lYS_tO0re@&RR5a zLcFxJ!x(E$n=#Hdt**H-=M z#Zm;phl{L3q((!YOYE6mgW2RtOA(hapF}@6oIMdvuBLc(!%ukb*yW>?Q@kEH%tr%+ z=Mo~z5Sx*@umr43miMB&TFFOE)43VcEKQGhQ_l$kvZ}07t=V!q)$fhIXS%ODc6Hxq z{n&T9)t2L$)n}Y-x=zdN_t}*7*DbRr{b0ee+a4XC8$G|S)P+K3+Znhm^NA(JpOV7f zkcR8{5FhC{j}LTQKwig16m(odL1B6F(`~~ucCBu^`eJwAY46hI##OE)z$YAwoc~781Z`ddl$Q??D_0H?FJC%@ zR-V@mkr+kI^GgQIG3q>~hpvxL3CKY67VL<(PFOg|OD%lpX)Q(jbzxIdGGG;&(2<=_LKl!o*ZcSPCz%(p#QL`e}@?gJKj3ciE4y5O^J7CPPexGM2+w zQIPmJ$kmA;6l6@al7QTv2$C2FsZ9jAGZ`eJsGv1>33Bfg5YdQ$@KeE2D)M{S=B>9#e)k5c@(}5R z=38XAn9k`#WXlxK5NC2{gL#~0W^ss_+__*w8zPsR4dw~XXMW}35OW87L4II5)g7l; qK!uA^SGn^5Sv)*q%wip%;xpfWD-_b_^rTSvulp|d?{O8w7yknxYJ80V literal 0 HcmV?d00001 diff --git a/target/classes/models/MainApplication.class b/target/classes/models/MainApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..6ea5b6ca50c6ab7a04470eff919d24ae75523364 GIT binary patch literal 4776 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 Date: Sat, 7 Aug 2021 16:10:00 -0400 Subject: [PATCH 2/2] finally fished --- pom.xml | 7 +++ src/main/java/daos/CityRepository.java | 12 ++-- src/main/java/daos/Conecter.java | 38 ++++++++++++ src/main/java/daos/DELETEME.txt | 0 src/main/java/models/DELETEME.txt | 0 src/main/java/models/MainApplication.java | 64 +++++++++++--------- target/classes/daos/CityRepository.class | Bin 4370 -> 4402 bytes target/classes/daos/Conecter.class | Bin 0 -> 1677 bytes target/classes/models/MainApplication.class | Bin 4776 -> 3863 bytes 9 files changed, 86 insertions(+), 35 deletions(-) create mode 100644 src/main/java/daos/Conecter.java delete mode 100644 src/main/java/daos/DELETEME.txt delete mode 100644 src/main/java/models/DELETEME.txt create mode 100644 target/classes/daos/Conecter.class diff --git a/pom.xml b/pom.xml index 2c16393..a6249e2 100644 --- a/pom.xml +++ b/pom.xml @@ -33,5 +33,12 @@ mysql-connector-java 8.0.18 + + junit + junit + RELEASE + test + + \ No newline at end of file diff --git a/src/main/java/daos/CityRepository.java b/src/main/java/daos/CityRepository.java index e516c61..9b3de8b 100644 --- a/src/main/java/daos/CityRepository.java +++ b/src/main/java/daos/CityRepository.java @@ -44,13 +44,15 @@ public List readAll() { while (resultSet.next()) { String id = resultSet.getString(1); String name = resultSet.getString(2); - String population = resultSet.getString(3); - String level = resultSet.getString(4); + Integer population = resultSet.getInt(3); + Integer level = resultSet.getInt(4); list.add(new City( Long.parseLong(id), name, - Integer.parseInt(population), - Integer.parseInt(level))); + population, + level)); +// Integer.parseInt(population), +// Integer.parseInt(level))); } } catch (SQLException throwables) { throw new RuntimeException(throwables); @@ -85,7 +87,7 @@ public void update(Long id, City newCityData) { public void delete(Long id) { executeStatement(String.format(new StringBuilder() - .append("DROP FROM ciudades.city ") + .append("DELETE FROM ciudades.city ") .append("WHERE id = %s;") .toString(), id)); diff --git a/src/main/java/daos/Conecter.java b/src/main/java/daos/Conecter.java new file mode 100644 index 0000000..f39825f --- /dev/null +++ b/src/main/java/daos/Conecter.java @@ -0,0 +1,38 @@ +package daos; + +import com.mysql.cj.jdbc.Driver; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class Conecter { + + public Conecter(){} + + + public static void registerJDBCDriver() { + // Attempt to register JDBC Driver + try { + DriverManager.registerDriver(Driver.class.newInstance()); + } catch (InstantiationException | IllegalAccessException | SQLException e1) { + throw new RuntimeException(e1); + } + } + + public static Connection getConnection(String dbVendor) { + String username = "laura"; + String password = "zipcode0"; + String url = new StringBuilder() + .append("jdbc:") + .append(dbVendor) + .append("://127.0.0.1/") + .append("?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC") + .toString(); + try { + return DriverManager.getConnection(url, username, password); + } catch (SQLException e) { + throw new Error(e); + } + } +} 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/models/DELETEME.txt b/src/main/java/models/DELETEME.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/models/MainApplication.java b/src/main/java/models/MainApplication.java index b73515e..00af527 100644 --- a/src/main/java/models/MainApplication.java +++ b/src/main/java/models/MainApplication.java @@ -2,6 +2,7 @@ import com.mysql.cj.jdbc.Driver; import daos.CityRepository; +import daos.Conecter; import java.sql.Connection; import java.sql.DriverManager; @@ -18,8 +19,9 @@ public class MainApplication { public static void main(String[] args) { - registerJDBCDriver(); - Connection mysqlDbConnection = getConnection("mysql"); + Conecter conecter = new Conecter(); + conecter.registerJDBCDriver(); + Connection mysqlDbConnection = conecter.getConnection("mysql"); CityRepository cityRepository = new CityRepository(mysqlDbConnection); executeStatement(mysqlDbConnection, "DROP DATABASE IF EXISTS ciudades;"); executeStatement(mysqlDbConnection, "CREATE DATABASE IF NOT EXISTS ciudades;"); @@ -32,8 +34,8 @@ public static void main(String[] args) { .append("level int null);") .toString()); - cityRepository.create(new City(12L, "Chicago", 3, 7)); - cityRepository.create(new City(13L, "New York", 3, 7)); + cityRepository.create(new City(12L, "Chicago", 3, 7)); + cityRepository.create(new City(13L, "New York", 8, 4)); System.out.println(cityRepository.readAll()); } @@ -53,11 +55,13 @@ static void printResults(ResultSet resultSet) { String firstColumnData = resultSet.getString(1); String secondColumnData = resultSet.getString(2); String thirdColumnData = resultSet.getString(3); + String forthColumnData = resultSet.getString(4); System.out.println(new StringJoiner("\n") .add("Row number = " + rowNumber) .add("First Column = " + firstColumnData) .add("Second Column = " + secondColumnData) - .add("Third column = " + thirdColumnData)); + .add("Third column = " + thirdColumnData) + .add("Forth Column = " + forthColumnData)); } } catch (SQLException e) { throw new Error(e); @@ -68,7 +72,7 @@ static void executeStatement(Connection connection, String sqlStatement) { try { Statement statement = getScrollableStatement(connection); statement.execute(sqlStatement); - connection.setAutoCommit(false); + // connection.setAutoCommit(false); } catch (SQLException e) { throw new Error(e); } @@ -84,29 +88,29 @@ static Statement getScrollableStatement(Connection connection) { } } - static Connection getConnection(String dbVendor) { - String username = "laura"; - String password = "zipcode0"; - String url = new StringBuilder() - .append("jdbc:") - .append(dbVendor) - .append("://127.0.0.1/") - .append("?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC") - .toString(); - try { - return DriverManager.getConnection(url, username, password); - } catch (SQLException e) { - throw new Error(e); - } - } - - static void registerJDBCDriver() { - // Attempt to register JDBC Driver - try { - DriverManager.registerDriver(Driver.class.newInstance()); - } catch (InstantiationException | IllegalAccessException | SQLException e1) { - throw new RuntimeException(e1); - } - } +// static Connection getConnection(String dbVendor) { +// String username = "laura"; +// String password = "zipcode0"; +// String url = new StringBuilder() +// .append("jdbc:") +// .append(dbVendor) +// .append("://127.0.0.1/") +// .append("?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC") +// .toString(); +// try { +// return DriverManager.getConnection(url, username, password); +// } catch (SQLException e) { +// throw new Error(e); +// } +// } +// +// static void registerJDBCDriver() { +// // Attempt to register JDBC Driver +// try { +// DriverManager.registerDriver(Driver.class.newInstance()); +// } catch (InstantiationException | IllegalAccessException | SQLException e1) { +// throw new RuntimeException(e1); +// } +// } } diff --git a/target/classes/daos/CityRepository.class b/target/classes/daos/CityRepository.class index 3cb8835cda19135213b271a4c593a0eded884f93..0b791fc3b38b474eec7db5e88ea8680bd7a9dd53 100644 GIT binary patch delta 1794 zcmY*Z`Cn936#u@*%)B>mu0q3-V=4nu>5Md{Ai0HrgczWRh^SeEOn@O6JS^MBb}O^; zwb^QAQmKWa!wlq>wAsGdzSwX54Sia^cV-%l`Ec&J+xL9W_niB7FH=;*+y#`G583fp(<0d)Y ztYNExEQDOR1-D9bn>4p;xWhmg+i2F|P6=?A1i0IUdvLFY`!w8dz>Dn?;{mz&pqmsQ zb>T7WlEyOdIG)h)q>iU_JgsB5j%Rc{E6+bCk)PM_f`%6loh?_gGHW&lw*&*7!LGJI zb(a}x3-!#ma@3f%N5e}DHh5MoRP-XeEHDeREthR>+AG*=RoP0HzKVScGRCeiYuOmu zU<&l(HG$W$Pv8yg*Kk1KAl?*sOHKv^4&kuCAdV=Q)KFPdS+UaVv+^97>*os`MMObn z9I?;r=nRzg^aQuobo81U_6Q6iDiFi4zzE(};M&yP8tUu~RCJhIH5?N-juSG}Nr6+? zFIcm8n1aA*j4H^s0&2EZZ_iy)gm(qXP%iKu-Y5U^?ryW!>g*pW-ut&+&zZF9p8B*H+Zts!d$X3|3Z>e~!K$*9v@t(ZN#31a-Wl zEo4$p1-5C`)2ppUy-x4wGFJsV`$E=feTRM)-^zM?H`wG9itBrUAMlI7bqHErMzQjn zwb%GVIcM#3)r4oV@f2Lne^r)%rFPOULNVtUoWyC&#XQbztS!9*b6$idKbEEaEvu)_|zYKxu-;A7J|2?g%n#Mv&D!gzQ>>3^@vR zW4YfJ!-Xp9{Py@b&*pc;FhNBW7aZ)6ig<$0y-aLIV!N2f=}meB|RH&6|y{4uoEp0OXxXx&xvX*jTgpD%EHeE zu0~CgNo^Q)RAw20rN)w6EtYeoo-3^7Ur5)mLPNu!Xe`&T(uqcHsAQ?239D&kTeNdU zwuRRhL4FKV75Ily06w6LRhml_L~!Xzc*cr5k?g?Y*jh+8o#|vTArBMD<>FW^y-Cu9 zMl;qhoPxEKClNME5ZQBez7eFciZ=JO2psO|(vXS6?U!bTwJ5zfEIV`-a|ER^C`vkI z$)XS*N->2w=TQegGnYkJK#{9>u9j&^F5X0x6qh=3m0TDZ*O0GDpD!}Ws*|jw7zHU- zg%O0wgJdFb+K$0!PV+ZJkrBZKW6vj{NHfW;A-T11GtJ3NdMbg(1Sv?7C`gi!q2rH% zAn#5t rl&p~ab25y4cWKxVKi`U#TK5I3yLjK{efB>0b3ga9g zT!i0r=h zJ08Nra(P6@qu8y%(D0as$2B~m;Ykfo$@@=B&}URUtKzw_Q#FcFZkkZ{sCb^Znh$5coTaC_Q}Ir0&n9Tf&CaWemCc~9l*GPxiO5Pa8IARdT`J?+|UyWtJouO z5bp{^F`>Y|wcj7;3%S?ygojm33QXaU#GMv+4~GTHafGx5j$+2}SeC6X$NK`SQ7v!` zACP5De}6a>9`p`02EyI_{!p3~AEsl5+ehj6Sl|?Q3w){KD}k?Z!Z>O1 z=Vz^LZEkU{Yi(|H`g(@^UVk98)JGytfz7x^;2X@0d#za}W2e^O9Pkc?0(HT#g854t zX2od>5B3DRstW6j)7mcWTYM+=|9*U%O(^ys1b)OX0@tF$*r8V_zZysMKh38VEH+B* znZ_}DS+<*_rr<*Un`ArKVH@poPN9MdV~$uDsif~54jeESW{!{z^RbMla~T0fUyMt* zOH0Np{47V6jHb^WI|G)YgD~xU_{KeBw!S*z{*7M2=AF->=n&QrEx}- zm(FIbO=hjdrC1fq!lv*#vnm^*@&g2oj?~P+2A6pXnI<&3EU|sL*=3Cz7MB_~ti{vF z@{~-%F^L5Zv%@lpg$^s137j{DY!li?{~aGiYST1wJS7uw9xdL_oN4GlCl*naO5=~z zoJbjUtfC6l)S;dVwvf%0Ja1;v9aO241^dXnj|$0JTA{(of@`pb`W904wY1EPF2ZHB zEJVx2I$Bo7*-(r1u|5P7)vM@29X2GG)JM=j0U8M`HI?M*(L_%(J#5|INK?_GV&fS! z*QjWMV*PcM5q5T!)YkK8peqm&FR7&G|FPnr-F+vIDzd z?qnm<_%`NI00)c8p>wun&ScA+XvZd|Q{cf>iL{dhkt5brG>sI`1k4#1L}ATXB9}tB zkd8IOWo${Shz(>JYXqgyDM}h;nMWZUlwuKU&ZQ16R$j)+SFj1Syw}JwB^PHrOOi_y zc}gzKjH}7tM4L}9!KyDdfj~i$RdEy%@*tTgZ05tzJt?lXNu)#IwcU zM7k~?exj6>XYnK)#ay~CNjLr)SN{)6c1Zr&m_|OY6nJCzJMpuVhWyR=38!$9qVM2Y N4%|*&x*rc<*MEGPB!B<_ diff --git a/target/classes/daos/Conecter.class b/target/classes/daos/Conecter.class new file mode 100644 index 0000000000000000000000000000000000000000..c78e80de2cbde87986d4df70a7f3048cf5ede132 GIT binary patch literal 1677 zcmZux-Bub`7~KbfK?F%a45m$MT4NQXh_$uVkThb_CIQm~wDs~ZOmOTlLuZDVzFWzR~cl zhHVWy8tz0fi9!T-BeEESCS=1m)4kdUFFLMe+ z+MeOsvPqIiOM2d^A9{E8cH#gu}|MRRwzV&=V=T-;+eqw(4$>52 zBarlfe>8uA>qGYEZBjRlL68#vTp(o0wkw(a8?&XeBG&2VFsSSOZril#>Rv-Cx$PJ# zsM3q=TrR({wYJW`d`_Ttk6s?wreZ1hZrfPoTvbKUX|^nrnN@lI8gUj~xMBdKSxUhktm_WogTXa&Ef+O!`k` zrdQ%a?2dYsnbFFx9=pz|dW4;=uxzzh$^xsSnDN)qQ8RXF6czEEep=(Qd$9uL4=`SS zEtgk5{3dY|*Z6--eI_8(8)5qqXF2wQeJFbl@s@)CK4u&4EKcDD$FVK|pWsu@CNVz< ze$^oZ=8}OkO#Fr5JA{5i{K*9-kH{B&|CRt?3ezO)_FAuxa7P_9ixAtZ#LN(tL;@-5 zOb-rD@W7k+jF`{)(-7F#urSHRTUewnmBK%yQY2f+sZuglzCirw9Mj3f8LnjcOI}q? zlFb=X`>QLr-(lwW?cfE{M{~h*%)Teh0)a0@|342@m5%@b literal 0 HcmV?d00001 diff --git a/target/classes/models/MainApplication.class b/target/classes/models/MainApplication.class index 6ea5b6ca50c6ab7a04470eff919d24ae75523364..a8565dd2004a98d4885e33af7182bc8c21689266 100644 GIT binary patch delta 1823 zcmZux`&SfY7=FH)ot=-}S%g6r0mbzK>avKHsTf*`nHsDnC1GU&uDS}W!lKe`ORdan zI+dAOcJZ1eU@jmfcCk+V1N|=@PxgGX3+Xw{5AVG5e($`O=Xqu>mY*z3{rS(0n*iqH zHy;)uZep7c8sf@qmuOe_4ilX|m`F(M@L?f#N_0tdn@IW)KwP3n-FHdsme?cFEAfg7 zylUb#gQeAF`S3d4kVyFu#G9(vTbZL25RllLgMHYq!f*TV4&GH=4*2mN4w^V*;;;`D zIO4~{II7Gs6YonL_aTfE5{~NifqM8*;v8k*>lzlcoZHdlUTQb%qFrj`^OQO5FE*rSkFUo~DJhe+e%;%ZM)|J6pz+y(TVMxQuTE%(|`dww5gk3pKc6;ahwsAfvI}q2@%_b`w`E z^r7Fv0Ir$%-okaHEwrM|#Gr-M7;=t!BY_$WTeyJ{3qRmT=XdYaDK)ssiPt4|hdO&Y zT4Pijlu;QT#*U6aYaWDNU)eMSPi2#B48hwl0<$?XNO&T4 z&JcVN+wWRS*%1WzLasd_jXXPF8C#hGnv^|}HjP5&RgECnJP}1hD7H(ydFCKW)0mu% zPEpaRc`_RvK&UE>X=zOF=SUjV8d0tQN?W3cYMg{Z6r&6!n2Ayfb28>(3KuWqVpFjk zA*>=SsVJu7Y0SVgJZwTaI;iq}n1v&lzB6B8BM13OvcyW!Qn0 zET;2xHJ-|#g%qE4zEKn&!iYnU}RNNR(C%5~BxNx`e0s{34H%>8YwBH48fFIi!ZYz+_ z%@)82kV$-B{l%y)KS5o8! zM5l>xYAkge&(YIa@Bo_Wc~~}u4fG72_u+ZGz=6_PQq*U33ol|L?~00Cco-v4YyL+p z`S*yWbX+W@XyN=BvDhZGwb|MD>r%5hXYz_u3v~2F73fu2u}ZeeA0H#g0pP;X=;|z= xO0x;tm|pE{WAz1$HTF=Yn_RdgA&$}0T#)i1?y|IQVzUqsO1eT~3*XeR^J0T&*9Phl}dpz&+zTeC< z|9j#|0Ne2I7H(~yhhyLt>Co^?ve4j7;12vg4c`ly$bGA z@CF6oWm7x09Pd2#QIx=*C$YPs{j%gsNSJ zWw^T~L|Qi;kr3^%GrEMj0mIUV3fVE;8PUc}O5y`{S~HJmjv?*?Vbq;4@)DW{vRq~6 zlY^RJb?0)Xk=9(pwsz89mLdr&TW=ni)J|$iQ?tgCDc3Qq@tvMO%^9bKh9w?LsLxL4 zPnf-9J+@`(X<<>q3f~Up$+DP^mZc4MdRWiddBe4xX`z_W?0m9kftZS_eo9XlT>Vf% z7iwLtOB!4v+OpoTo-degN_T0lI`3+(p4BZ^LStDaRg_XiB79AuM~4RbPNnr+fKV(Q z%1&WkL16L4AxNmD-SqK6E$0=0>|s7Rg6aAp5y_@dKIJ$C)OE)UC-3&yW+7|!YOW?> zd0waUOjuOMiaHA<)s8*oGl7}(GhwHg{epzczGydqxCDZPwoq81x-HI8M5+>n(At&b zx|>QnwrL9Lg&wpoZFExz>rfeLOM#C}=U9@)(mex87aT{o($g}&NR;WY9HfLzfu9BB zEjuZzve-&y?1*k@THj}go@~6R-!_XDQ_+WgDyFbcLZ#P0Dsni%9$TUx zgz{G;tm_>DnT zN;_WrCD;d9&6!Rd*QYy}tpGmZ>Zja|DY0hLdL^^k})MpVUoXO65&V z`Rn+GgqmQsi9sUc85Q5ew#u|Hgh%uH5%>#C68K*wSu^r*y=PG`IU#j>Oe$7$pDHL3T zE4?|o-{!0)j#5nM{)W&G+fz(f4DUo&LV)&L6~DvpX?&j;0SUk1`HZca@dR5v0< zKqBo83eUhF@JIHAia+7cq-`niQp>CO3;s&BnOec&SW!+JximL~Efh^=#?m_&(vDs8w~Z{hFOq=d0O?2W^gA=J8Dr=VZSd(j6yc9z?RX1OCqRzGc9dTPQr=9W|j^l>dc z&FQ7Pd@lB?u49^+*RN!!v44t-x(<)@$oQKe{@+>jw4F_QosdjVCPhR^zujc~L&bCW zXAyN#4gZOXf8luviE=Uet-Q;y439gdrd+6EnhekEPN(&JKBTg`Y-PAW6IngqKd6gDiDI! z;v0zQQt!ng1Yc^JQ#Q-VYZnM&@B(4j$%A6!Wc0e0rCXWjOt)#0;l)I}CL7?4=3^iG zg{!#8+k8#&UJ{PlFPIlcxm`jVS8G_=$8Tq7*D5s@{T7SnfjTn5%~))L{=1XK>E^w- z9p$zxHc4+Dh*(wDd1(i3{|2V=R12Q^C@7lUyy z9CP4wF{KtuLVn8qMn|C$-D7fJ=N@6{Q~rQRi*32cAFpNs7uX2J{l2)@HwJN)LuOgA zjvoiT-baN3i35Efk1yeUl4ptM%C=cZkMW`cFXgey6UNccYt>i4e%!#jY7AhI5-yga zkP)Hmt~pf1BXfuj%%gI&eHK-N?QwYyN_)K8JI2Iu9yO!0P~){TSQf7nhvni>FAi}Y zX3#*jj(IeWHe$sbn&Qn>%jH?Dn!)No+9ITDO47%%wqpjD&md8bd_UrhXa(b1$yl3s z*UaBlSc}#C9%{j6T*j}VHMo|NE?kbiNDz*7%({j7y$Bk$rf>!B#6~asgr6aXaKOuc z8V7NR`Nz2n3?oIn6mGqTeME3OwFM$gZF5*R*wKCg>nm`6a2^{*J7#gkQy!EmYUwEA z0Ubw_>h1i9>!7p~%NU>ly^Zopnm&RX>0%jExe24ZqG=pu0OF?!H{%vsd>OApl1U(8`;%%0ar@=NW8BtdI1|NFxXbpjrj#O4uaGoJN#`Qz7D`q{OJY{)Zb>@#LjD|T$(0R)D_1=An1{+4 zJXAtuH|m(vHh!aCjRsu9(rjm0t|f=BBMLiUV<+yxF5FAm{nR^y>$!S2zlZnWQGSOC z1a}jY228V{w-C1$oWK~bBD6DsG_RtRK8Or-dVe^;S9HQz9K$%z0@Y=R{udR}fAGLw zf?G{=`M&C-i${V|uP>E)YXxp>i(J4}6<~hlqWk$ZvR=iiuVv$aw5wzv*0Plv*<4NJ zLo*{^M;ewHP!}+uImCeVB?hd=WQhSXDsBvd`d2UyIqPGOGL>Yh9!%`vY7OyHi z1nVKaKm!pOw!}%}QLnnD4a@xia zIuY|aOn|i=4p)FSwjuA~TZOG~c~!x+4Jhy`;$_z?vTH|F#>vuOF-d+Z1xcQwwqVw( z_|6&ZdKz7G*iC}mFput0j@`X%00CtU>9!|0Umu){gz-x