package prefuse.data.io.sql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* @author <a href="http://jheer.org">jeffrey heer</a>
*/
public class ConnectionFactory {
/** String constant for the commonly used MySQL JDBC driver */
public static final String DRIVER_MYSQL = "com.mysql.jdbc.Driver";
/** String constant for the JDBC/ODBC bridge driver */
public static final String DRIVER_JDBC_OBDC = "sun.jdbc.odbc.JdbcOdbcDriver";
/** Protocol prefix for JDBC URLs */
public static final String PROTOCOL_JDBC = "jdbc:";
/** Sub-protocol prefix for MySQL connections */
public static final String SUBPROTOCOL_MYSQL = "mysql:";
/** Sub-protocol prefix for JDBC/ODBC bridge connections */
public static final String SUBPROTOCOL_JDBC_ODBC = "odbc:";
// ------------------------------------------------------------------------
/**
* Get an instance of the default SQL data handler.
* @return an instance of the default SQL data handler
*/
public static SQLDataHandler getDefaultHandler() {
return new DefaultSQLDataHandler();
}
// ------------------------------------------------------------------------
// Generic Connection Methods
/**
* Get a new database connection.
* @param conn the Connection object to the database
* @param handler the data handler to use
* @return a DatabaseDataSource for interacting with the database
* @throws SQLException if an SQL error occurs
*/
public static DatabaseDataSource getDatabaseConnection(
Connection conn, SQLDataHandler handler)
throws SQLException
{
return new DatabaseDataSource(conn, handler);
}
/**
* Get a new database connection, using a default handler.
* @param conn the Connection object to the database
* @return a DatabaseDataSource for interacting with the database
* @throws SQLException if an SQL error occurs
*/
public static DatabaseDataSource getDatabaseConnection(Connection conn)
throws SQLException
{
return getDatabaseConnection(conn, getDefaultHandler());
}
/**
* Get a new database connection.
* @param driver the database driver to use, must resolve to a valid Java
* class on the current classpath.
* @param url the url for the database, of the form
* "jdbc:<database_sub_protocol>://<hostname>/<database_name>
* @param user the database username
* @param password the database password
* @param handler the sql data handler to use
* @return a DatabaseDataSource for interacting with the database
* @throws SQLException
* @throws ClassNotFoundException
*/
public static DatabaseDataSource getDatabaseConnection(String driver,
String url, String user, String password, SQLDataHandler handler)
throws SQLException, ClassNotFoundException
{
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
return getDatabaseConnection(conn, handler);
}
/**
* Get a new database connection, using a default handler.
* @param driver the database driver to use, must resolve to a valid Java
* class on the current classpath.
* @param url the url for the database, of the form
* "jdbc:<database_sub_protocol>://<hostname>/<database_name>
* @param user the database username
* @param password the database password
* @return a DatabaseDataSource for interacting with the database
* @throws SQLException
* @throws ClassNotFoundException
*/
public static DatabaseDataSource getDatabaseConnection(String driver,
String url, String user, String password)
throws SQLException, ClassNotFoundException
{
return getDatabaseConnection(driver, url, user, password,
getDefaultHandler());
}
// ------------------------------------------------------------------------
// Driver Specific Methods
// -- MySQL ---------------------------------------------------------------
/**
* Get a new database connection to a MySQL database.
* @param host the ip address or host name of the database server
* @param database the name of the particular database to use
* @param user the database username
* @param password the database password
* @param handler the sql data handler to use
* @return a DatabaseDataSource for interacting with the database
* @throws SQLException
* @throws ClassNotFoundException
*/
public static DatabaseDataSource getMySQLConnection(
String host, String database, String user, String password,
SQLDataHandler handler)
throws SQLException, ClassNotFoundException
{
String url = PROTOCOL_JDBC + SUBPROTOCOL_MYSQL
+ "//" + host + "/" + database;
return getDatabaseConnection(DRIVER_MYSQL,url,user,password,handler);
}
/**
* Get a new database connection to a MySQL database, using a default
* handler.
* @param host the ip address or host name of the database server
* @param database the name of the particular database to use
* @param user the database username
* @param password the database password
* @return a DatabaseDataSource for interacting with the database
* @throws SQLException
* @throws ClassNotFoundException
*/
public static DatabaseDataSource getMySQLConnection(
String host, String database, String user, String password)
throws SQLException, ClassNotFoundException
{
return getMySQLConnection(host, database, user, password,
getDefaultHandler());
}
} // end of class ConnectionFactory