/* * SSSync, a Simple and Stupid Synchronizer for data with multi-valued attributes * Copyright (C) 2014 Ludovic Pouzenc * * 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 */ 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 } 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 clazz = (Class) 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; } }