/*
* @(#)$Id: DBAccessor.java 3619 2008-03-26 07:23:03Z yui $
*
* Copyright 2006-2008 Makoto YUI
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Contributors:
* Makoto YUI - initial implementation
*/
package xbird.util.jdbc;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import xbird.util.jdbc.datasource.DataSourceFactory;
/**
* An utility class manages database accesses.
* <DIV lang="en">
* This class also provides Connection Pooling feature and
* PreparedStatement Caching feature.
* </DIV>
* <DIV lang="ja"></DIV>
*
* @author Makoto YUI <yuin405+xbird@gmail.com>
*/
public abstract class DBAccessor {
private static final Log LOG = LogFactory.getLog(DBAccessor.class);
private static final DataSource dataSource = DataSourceFactory.createDataSource();
/** Database connection object. */
protected static Connection sharedConnection;
public Connection getConnection() {
return getConnection(false);
}
/**
* Returns sharable connection or new connection.
*
* @param share Is requirement sharable connection.
*/
public Connection getConnection(boolean share) {
if(share && sharedConnection != null) {
return sharedConnection;
} else {
Connection conn = createConnection();
if(share && sharedConnection == null) {
sharedConnection = conn;
}
return conn;
}
}
public abstract String getDatabaseName();
/**
* Escapes SQL String.
*/
public abstract String escapeString(String inputString);
/**
* Converts java byte array to the database specific value.
*/
public abstract String toBytea(byte[] b);
public abstract boolean supportsForUpdate();
public abstract boolean supportsForBulkload();
public abstract BulkLoader getBulkLoader();
public final DataSource getDataSource() {
return dataSource;
}
/**
* Closes the DataSource.
*/
public final void shutdownDataSource(DataSource ds) throws SQLException {
// TODO who call me.
BasicDataSource bds = (BasicDataSource) ds;
bds.close();
}
/**
* Connection to db and return the connection.
*/
private static Connection createConnection() {
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
LOG.fatal(e);
}
if(conn == null)
LOG.fatal("getConnection(): could not get connection.");
return conn;
}
}