summaryrefslogtreecommitdiff
path: root/src/connectors/src/data/io/sql/SQLConnectionWrapper.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/connectors/src/data/io/sql/SQLConnectionWrapper.java')
-rw-r--r--src/connectors/src/data/io/sql/SQLConnectionWrapper.java136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/connectors/src/data/io/sql/SQLConnectionWrapper.java b/src/connectors/src/data/io/sql/SQLConnectionWrapper.java
new file mode 100644
index 0000000..2bab2c8
--- /dev/null
+++ b/src/connectors/src/data/io/sql/SQLConnectionWrapper.java
@@ -0,0 +1,136 @@
+/*
+ * SSSync, a Simple and Stupid Synchronizer for data with multi-valued attributes
+ * Copyright (C) 2014 Ludovic Pouzenc <ludovic@pouzenc.fr>
+ *
+ * This file is part of SSSync.
+ *
+ * SSSync is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SSSync is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SSSync. If not, see <http://www.gnu.org/licenses/>
+ */
+
+package data.io.sql;
+
+import java.io.Closeable;
+import java.io.File;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.Driver;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+import data.io.MVDataReader;
+
+/**
+ * TODO javadoc
+ *
+ * @author lpouzenc
+ */
+public class SQLConnectionWrapper implements Closeable {
+
+ /**
+ * Enumeration of supported DBMS. Each use a particular JDBC driver.
+ */
+ public enum DBMSType { oracle, mysql/*, derby*/ }
+
+ private final Connection conn;
+
+ /**
+ * TODO javadoc
+ * @param dbms
+ * @param host
+ * @param port
+ * @param ress
+ * @param user
+ * @param pass
+ * @param db
+ */
+ public SQLConnectionWrapper(DBMSType dbms, String host, int port, String ress, String user, String pass, String db) {
+
+ String driverClassName=null;
+ String url;
+
+ switch ( dbms ) {
+ case oracle:
+ driverClassName="oracle.jdbc.driver.OracleDriver";
+ url="jdbc:oracle:thin:@" + host + ":" + port + ":" + ress + "/" + db;
+ break;
+ case mysql:
+ driverClassName="com.mysql.jdbc.Driver";
+ url="jdbc:mysql://" + host + ":" + port + "/" + db;
+ break;
+ /* Could be useful with JUnit tests
+ case derby:
+ driverClassName="org.apache.derby.jdbc.EmbeddedDriver";
+ url="jdbc:derby:" + db;
+ break;
+ */
+ default:
+ throw new IllegalArgumentException("Unsupported DBMSType : " + dbms);
+ }
+
+ try {
+ @SuppressWarnings("unchecked")
+ Class<? extends Driver> clazz = (Class<? extends Driver>) Class.forName(driverClassName);
+ DriverManager.registerDriver(clazz.newInstance());
+ } catch (Exception e) {
+ throw new RuntimeException("Can't load or register JDBC driver for " + dbms + " (" + driverClassName + ")", e);
+ }
+
+ try {
+ conn = DriverManager.getConnection(url, user, pass);
+ } catch (SQLException e) {
+ throw new RuntimeException("Can't establish database connection (" + url + ")");
+ }
+ }
+
+ /**
+ * Builds a new reader against current connection and a File containing a SELECT statement.
+ * @param name
+ * @param queryFile
+ * @return
+ * @throws IOException
+ */
+ public MVDataReader newReader(String name, File queryFile) throws IOException {
+ return new SQLRelDataReader(name, conn, queryFile);
+ }
+
+ /**
+ * Builds a new reader against current connection and a String containing a SELECT statement.
+ * @param name
+ * @param query
+ * @return
+ * @throws IOException
+ */
+ public MVDataReader newReader(String name, String query) {
+ return new SQLRelDataReader(name, conn, query);
+ }
+
+ /**
+ * Close the current database connection.
+ */
+ @Override
+ public void close() throws IOException {
+ try {
+ conn.close();
+ } catch (SQLException e) {
+ throw new IOException("Exception occured while trying to close the SQL connection", e);
+ }
+ }
+
+ /**
+ * @return the current database connection (useful for JUnit tests)
+ */
+ public Connection getConn() {
+ return conn;
+ }
+}