diff --git a/pom.xml b/pom.xml index de16c947c2bb1a6dd9c88a0f457bde8216540989..762ab426b1719f82a41e2d788157a7c1eea1ccc1 100644 --- a/pom.xml +++ b/pom.xml @@ -43,19 +43,40 @@ <version>5.5.2</version> <scope>test</scope> </dependency> - + <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql --> <dependency> - <groupId>org.postgresql</groupId> - <artifactId>postgresql</artifactId> - <version>42.2.18</version> + <groupId>org.postgresql</groupId> + <artifactId>postgresql</artifactId> + <version>42.2.18</version> </dependency> <!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc10 --> <dependency> - <groupId>com.oracle.database.jdbc</groupId> - <artifactId>ojdbc10</artifactId> - <version>19.8.0.0</version> + <groupId>com.oracle.database.jdbc</groupId> + <artifactId>ojdbc10</artifactId> + <version>19.8.0.0</version> </dependency> - + + <!-- https://mvnrepository.com/artifact/org.apache.derby/derby --> + <dependency> + <groupId>org.apache.derby</groupId> + <artifactId>derby</artifactId> + <version>10.15.2.0</version> + </dependency> + <!-- https://mvnrepository.com/artifact/org.apache.derby/derbyclient --> + <dependency> + <groupId>org.apache.derby</groupId> + <artifactId>derbyclient</artifactId> + <version>10.15.2.0</version> + </dependency> + <!-- https://mvnrepository.com/artifact/org.apache.derby/derbytools --> + <dependency> + <groupId>org.apache.derby</groupId> + <artifactId>derbytools</artifactId> + <version>10.15.2.0</version> + </dependency> + + + </dependencies> </project> diff --git a/src/main/java/table_view/DerbyJDBCDialect.java b/src/main/java/table_view/DerbyJDBCDialect.java new file mode 100644 index 0000000000000000000000000000000000000000..36cc4ef18ee635dc8ab5cff7948c3cd2c1e75697 --- /dev/null +++ b/src/main/java/table_view/DerbyJDBCDialect.java @@ -0,0 +1,34 @@ +package table_view; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Objects; + +class DerbyJDBCDialect implements JDBCDialect{ + + @Override + public String getDriverClazzName() { + return "org.apache.derby.jdbc.EmbeddedDriver"; + } + + @Override + public Connection getConnection(String dbName) throws SQLException { + return DriverManager.getConnection("jdbc:derby:" + dbName + ";create=true"); + } + + @Override + public String getCreateTable() { + return "CREATE TABLE person(id int GENERATED ALWAYS AS IDENTITY, first_name varchar(64), last_name varchar(64), email varchar(64))"; + } + + @Override + public void handleExceptionForCreation(SQLException e) { + //table already exist + if(Objects.equals(e.getSQLState(), "X0Y32")) { + return; + } + e.printStackTrace(); + } + +} diff --git a/src/main/java/table_view/JDBCDialect.java b/src/main/java/table_view/JDBCDialect.java index deca9f0cacf2b9115138a990e94073781709a5b2..dbc012dfdd8919291694dcc34525d46735f8151d 100644 --- a/src/main/java/table_view/JDBCDialect.java +++ b/src/main/java/table_view/JDBCDialect.java @@ -1,8 +1,11 @@ package table_view; +import java.sql.Connection; +import java.sql.SQLException; + interface JDBCDialect { String getDriverClazzName(); - String getDriverID(); + Connection getConnection(String dbName) throws SQLException; String getCreateTable(); - + void handleExceptionForCreation(SQLException e); } diff --git a/src/main/java/table_view/PersonDAO.java b/src/main/java/table_view/PersonDAO.java index 6dda4ec5788cd08d5407e2071acff30d73e2f841..faacdadc05ff9c056676cddb3654bee35e9ee37a 100644 --- a/src/main/java/table_view/PersonDAO.java +++ b/src/main/java/table_view/PersonDAO.java @@ -1,7 +1,6 @@ package table_view; import java.sql.Connection; -import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -31,12 +30,12 @@ class PersonDAO implements AutoCloseable{ throw new RuntimeException(e); } - String url = dialect.getDriverID() + "://localhost/java1"; + try { - conn = DriverManager.getConnection(url,"java1","java4ever"); + conn = dialect.getConnection("java1"); constructTable(); } catch (SQLException e) { - e.printStackTrace(); + dialect.handleExceptionForCreation(e); } } diff --git a/src/main/java/table_view/PostgresqlJDBCDialect.java b/src/main/java/table_view/PostgresqlJDBCDialect.java index 1e6c5faf58c822704a0a72ee6f2dd89b80d9de64..49353d5c68386adb31e1ccbdd292961d7f59730b 100644 --- a/src/main/java/table_view/PostgresqlJDBCDialect.java +++ b/src/main/java/table_view/PostgresqlJDBCDialect.java @@ -1,5 +1,9 @@ package table_view; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + class PostgresqlJDBCDialect implements JDBCDialect{ @Override @@ -8,8 +12,8 @@ class PostgresqlJDBCDialect implements JDBCDialect{ } @Override - public String getDriverID() { - return "jdbc:postgresql"; + public Connection getConnection(String dbName) throws SQLException { + return DriverManager.getConnection("jdbc:postgresql://localhost/"+dbName,"java1","java4ever"); } @Override @@ -17,4 +21,8 @@ class PostgresqlJDBCDialect implements JDBCDialect{ return "CREATE TABLE IF NOT EXISTS person(id SERIAL PRIMARY KEY, first_name varchar(64), last_name varchar(64), email varchar(64))"; } + @Override + public void handleExceptionForCreation(SQLException e) { + e.printStackTrace(); + } }