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