From 943bc46bce3fabd100f87d9bca357e5115bbbaf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ko=C5=BEusznik?= <jan@kozusznik.cz> Date: Tue, 10 Nov 2020 13:45:25 +0100 Subject: [PATCH] Add support for derby DB --- pom.xml | 37 +++++++++++++++---- .../java/table_view/DerbyJDBCDialect.java | 34 +++++++++++++++++ src/main/java/table_view/JDBCDialect.java | 7 +++- src/main/java/table_view/PersonDAO.java | 7 ++-- .../table_view/PostgresqlJDBCDialect.java | 12 +++++- 5 files changed, 81 insertions(+), 16 deletions(-) create mode 100644 src/main/java/table_view/DerbyJDBCDialect.java diff --git a/pom.xml b/pom.xml index de16c94..762ab42 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 0000000..36cc4ef --- /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 deca9f0..dbc012d 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 6dda4ec..faacdad 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 1e6c5fa..49353d5 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(); + } } -- GitLab