/*
* Copyright (c) 2008-2016 Computer Network Information Center (CNIC), Chinese Academy of Sciences.
*
* This file is part of Duckling project.
*
* 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.
*
*/
package cn.vlabs.umt.common.datasource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.log4j.Logger;
import cn.vlabs.umt.common.util.Config;
public class DatabaseUtil {
public DatabaseUtil(Config config){
datasource=getDataScource(config);
}
public BasicDataSource getDataScource(Config config){
BasicDataSource ds = new BasicDataSource();
ds.setMaxActive(config.getInt("database.maxconn", 10));
ds.setMaxIdle(config.getInt("database.maxidle", 3));
ds.setMaxWait(100);
ds.setUsername(config.getStringProp("database.username", null));
ds.setPassword(config.getStringProp("database.password", null));
ds.setDriverClassName(config.getStringProp("database.driver", null));
ds.setUrl(config.getStringProp("database.conn-url", null));
ds.setTimeBetweenEvictionRunsMillis(3600000);
ds.setMinEvictableIdleTimeMillis(1200000);
return ds;
}
/**
* 关闭连接池
*
*/
public void close() {
if (datasource != null) {
try {
datasource.close();
} catch (SQLException e) {
}
}
}
/**
* 获取一个配置好的数据库连接。
*
* @return java.sql.Connection对象。
*/
public Connection getConnection() {
try {
return datasource.getConnection();
} catch (SQLException e) {
throw new DAORuntimeException(e);
}
}
/**
* 关闭一个Statement对象,辅助函数,避免重复编码。
* @param st Statement对象
*/
public static void closeStatement(Statement st){
if (st!=null){
try {
st.close();
} catch (SQLException e) {
log.error(st, e);
}
}
}
/**
* 关闭一个数据库连接,辅助函数,避免重复编码。
* @param conn 数据库连接
*/
public static void closeConnection(Connection conn){
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
log.error(conn, e);
}
}
}
/**
* 关闭一个结果集,辅助函数,避免重复编码。
* @param rs 数据库结果集
*/
public static void closeResultSet(ResultSet rs){
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
log.error(rs, e);
}
}
}
/**
* 集成调用,一次性关闭所有的内容。
* @param rs
* @param st
* @param conn
*/
public static void closeAll(ResultSet rs, Statement st, Connection conn) {
closeResultSet(rs);
closeStatement(st);
closeConnection(conn);
}
private BasicDataSource datasource;
private static final Logger log=Logger.getLogger(DatabaseUtil.class);
}