Configuration.java
/*
* 配置信息
*/
public class Configuration {
private String mysqlDriver;
private String mysqlURL;
private String mysqlUser;
private String mysqlPwd;
private Integer poolMaxSize;
private Integer poolMinSize;
public Configuration() {
}
public Configuration(String mysqlDriver, String mysqlURL, String mysqlUser, String mysqlPwd, Integer poolMaxSize,
Integer poolMinSize) {
super();
this.mysqlDriver = mysqlDriver;
this.mysqlURL = mysqlURL;
this.mysqlUser = mysqlUser;
this.mysqlPwd = mysqlPwd;
this.poolMaxSize = poolMaxSize;
this.poolMinSize = poolMinSize;
}
public String getMysqlDriver() {
return mysqlDriver;
}
public void setMysqlDriver(String mysqlDriver) {
this.mysqlDriver = mysqlDriver;
}
public String getMysqlURL() {
return mysqlURL;
}
public void setMysqlURL(String mysqlURL) {
this.mysqlURL = mysqlURL;
}
public String getMysqlUser() {
return mysqlUser;
}
public void setMysqlUser(String mysqlUser) {
this.mysqlUser = mysqlUser;
}
public String getMysqlPwd() {
return mysqlPwd;
}
public void setMysqlPwd(String mysqlPwd) {
this.mysqlPwd = mysqlPwd;
}
public Integer getPoolMaxSize() {
return poolMaxSize;
}
public void setPoolMaxSize(Integer poolMaxSize) {
this.poolMaxSize = poolMaxSize;
}
public Integer getPoolMinSize() {
return poolMinSize;
}
public void setPoolMinSize(Integer poolMinSize) {
this.poolMinSize = poolMinSize;
}
@Override
public String toString() {
return "Configuration [mysqlDriver=" + mysqlDriver + ", mysqlURL=" + mysqlURL + ", mysqlUser=" + mysqlUser
+ ", mysqlPwd=" + mysqlPwd + ", poolMaxSize=" + poolMaxSize + ", poolMinSize=" + poolMinSize + "]";
}
}
jdbc.properties
mysqlDriver=com.mysql.jdbc.Driver
mysqlURL=jdbc:mysql://localhost:3306/test
mysqlUser=root
mysqlPwd=123456
poolMaxSize=100
poolMinSize=10
oracleDriver=oracle.jdbc.driver.OracleDriver
oracleURL=jdbc:oracle:thin:@localhost:1521:orcl
oracleUser=scott
oraclePwd=tiger
DBManager.java
/**
* 数据库管理类
* @author sihai.hou
*
*/
public class DBManager {
/**
* 配置文件信息
*/
private static Configuration conf;
/**
* 数据连接池对象
*/
private static DBConnPool pool;
static {
Properties pros = new Properties();
try {
pros.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties"));
conf = new Configuration();
conf.setMysqlDriver(pros.getProperty("mysqlDriver"));
conf.setMysqlPwd(pros.getProperty("mysqlPwd"));
conf.setMysqlURL(pros.getProperty("mysqlURL"));
conf.setMysqlUser(pros.getProperty("mysqlUser"));
conf.setPoolMaxSize(Integer.parseInt(pros.getProperty("poolMaxSize")));
conf.setPoolMinSize(Integer.parseInt(pros.getProperty("poolMinSize")));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取Configuration
* @return
*/
public static Configuration getConf(){
return conf;
}
/**
* 获取connection对象
* @return
*/
public static Connection getConn(){
if(pool==null){
pool = new DBConnPool();
}
return pool.getConnection();
}
/**
* 创建connection对象
* @return
*/
public static Connection createConn(){
try {
Class.forName(conf.getMysqlDriver());
return DriverManager.getConnection(conf.getMysqlURL(),
conf.getMysqlUser(),conf.getMysqlPwd());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 关闭
* @param rs
* @param ps
* @param conn
*/
public static void close(ResultSet rs,Statement ps,Connection conn){
try {
if(rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(ps!=null){
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
//不使用连接池关闭conn
/*try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
} */
//使用连接池关闭conn
pool.close(conn);
}
/**
* 关闭
* @param ps
* @param conn
*/
public static void close(Statement ps,Connection conn){
try {
if(ps!=null){
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
//不使用连接池关闭conn
// try {
// if(conn!=null){
// conn.close();
// }
// } catch (SQLException e) {
// e.printStackTrace();
// }
//使用连接池关闭conn
pool.close(conn);
}
public static void close(Connection conn){
//不使用连接池关闭conn
// try {
// if(conn!=null){
// conn.close();
// }
// } catch (SQLException e) {
// e.printStackTrace();
// }
//使用连接池关闭conn
pool.close(conn);
}
}
DBConnPool.java:
/**
* 数据库连接池
* @author sihai.hou
*
*/
public class DBConnPool {
/**
* 存放数据库连接池集合
*/
private List<Connection> pool;
/**
* 数据库连接池最大数
*/
private static final int POOL_MAX_SIZE = DBManager.getConf().getPoolMaxSize();
/**
* 数据库连接池最小数
*/
private static final int POOL_MIN_SIZE = DBManager.getConf().getPoolMinSize();
public DBConnPool() {
initPool();
}
/**
* 初始化 数据库连接池
*/
public void initPool() {
if(pool==null){
pool = new ArrayList<Connection>();
}
while(pool.size()<DBConnPool.POOL_MIN_SIZE){
pool.add(DBManager.createConn());
System.out.println("书数据库连接池初始化成功!当前连接池数="+pool.size());
}
}
/**
* 获取连接 ————最后一个
* @return
*/
public synchronized Connection getConnection() {
int last_index = pool.size()-1;
Connection conn = pool.get(last_index);
pool.remove(last_index);
return conn;
}
/**
* 关闭连接:将连接放回连接池
* @param conn
*/
public synchronized void close(Connection conn){
if(pool.size()>=POOL_MAX_SIZE){
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}else {
pool.add(conn);
}
}
}
简单测试类:
public class Test{
public static void main(String[] args) throws SQLException {
long start = System.currentTimeMillis();
for(int i=0;i<10000;i++) {
test();
}
long end = System.currentTimeMillis();
System.err.println(end-start);
}
/**
* 查询10000次 使用连接池耗时:4374
* @throws SQLException
*/
public static void test() throws SQLException {
Connection conn = DBManager.getConn();
PreparedStatement ps = conn.prepareStatement("select id,name,salary from emp");
ResultSet rs = ps.executeQuery();
while(rs.next()){
System.out.println("name == "+rs.getString(1));
System.out.println("nmae == "+rs.getString(2));;
System.out.println("nmae == "+rs.getString(3));;
}
DBManager.close(rs,ps,conn);
}
/**
* 查询 10000 次 未使用连接池耗时:63717
* @throws SQLException
*/
public static void test1() throws SQLException {
Connection conn = DBManager.createConn();
PreparedStatement ps = conn.prepareStatement("select id,name,salary from emp");
ResultSet rs = ps.executeQuery();
while(rs.next()){
System.out.println("name == "+rs.getString(1));
System.out.println("nmae == "+rs.getString(2));;
System.out.println("nmae == "+rs.getString(3));;
}
DBManager.close(rs,ps,conn);
}
}