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