package dbmigrate.model.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import oracle.jdbc.OracleDriver;
import org.postgresql.Driver;
import dbmigrate.exceptions.ConnectException;
public class DbConnector {
public final static String DB_TYPE = "postgresql";
private int dbType;
private String dbHost;
private String dbName;
private String dbUser;
private String dbPass;
private String dbSid;
private boolean hasParams = false;
public static final int POSTGRESQL_DB = 1;
public static final int ORACLE_DB = 2;
private static DbConnector connectorInstance = new DbConnector();
private DbConnector() {
}
public static DbConnector instance() {
return connectorInstance;
}
private Connection connection;
public void setConnectionParams(int dbType, String host, String dbName,
String user, String password, String dbSid) {
setConnectionParams(dbType, host, dbName, user, password);
this.dbSid = dbSid;
}
public void setConnectionParams(int dbType, String host, String dbName,
String user, String password) {
this.dbType = dbType;
this.dbHost = host;
this.dbName = dbName;
this.dbUser = user;
this.dbPass = password;
this.hasParams = true;
this.connection = null;
}
public boolean hasParams() {
return this.hasParams;
}
public Connection getConnection() throws ConnectException {
if (!this.hasParams) {
return null;
}
return this.getConnection(this.dbType, this.dbHost, this.dbName,
this.dbUser, this.dbPass);
}
public Connection getConnection(String a, String host, String dbName,
String user, String password) throws ConnectException {
return getConnection(POSTGRESQL_DB, host, dbName, user, password);
}
public Connection getConnection(int databaseType, String host,
String dbName, String user, String password)
throws ConnectException {
if (null != this.connection) {
return this.connection;
}
Connection conn = null;
try {
if (databaseType == POSTGRESQL_DB) {
Driver driver = new Driver();
DriverManager.registerDriver(driver);
conn = DriverManager.getConnection("jdbc:postgresql://" + host
+ "/" + dbName, user, password);
} else {
// String driverName = "oracle.jdbc.driver.OracleDriver";
// Class.forName(driverName);
System.out.println("Oracle");
OracleDriver driver = new OracleDriver();
DriverManager.registerDriver(driver);
System.out.println(dbSid);
String url = "jdbc:oracle:thin:@" + host + ":" + dbSid;
conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
} catch (SQLException e) {
System.out.println(e.getMessage());
throw new ConnectException("Cannot connect to \"" + host + "\": "
+ e.getMessage());
// } catch (ClassNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
}
// try {
// if (databaseType == DbConnector.POSTGRESQL_DB) {
//
// conn = DriverManager.getConnection("jdbc:postgresql://"
// + host + "/" + dbName, user, password);
//
// } else if (databaseType == DbConnector.ORACLE_DB) {
// String driverName = "oracle.jdbc.driver.OracleDriver";
// Class.forName(driverName);
//
// String sid = "mydatabase";
// String url = "jdbc:oracle:thin:@" + host + ":" + sid;
// conn = DriverManager.getConnection(url, user, password);
// }
// } catch (SQLException se) {
// throw new ConnectException("Cannot connect to \"" + host
// + "\": " + se.getMessage());
// } catch (ClassNotFoundException e) {
// throw new ConnectException(
// "Cannot instantiate class oracle.jdbc.driver.OracleDriver");
// }
//
return this.connection = conn;
}
public int getDbType() {
return dbType;
}
public String getDbName() {
return dbName;
}
}