packagecom.test.test;
importjava.beans.PropertyVetoException;
importjava.io.Serializable;
importjava.sql.Connection;
importjava.sql.SQLException;
importcom.mchange.v2.c3p0.ComboPooledDataSource;
publicclassDBConnectionimplementsSerializable {
privatestaticComboPooledDataSource dataSource =null;
privatestaticclassDBConnectionHolder {
finalstaticDBConnection INSTNACE =newDBConnection();
}
privateDBConnection() {
System.out.println("DBConnection 私有构造方法...");
dataSource =newComboPooledDataSource();
try{
dataSource.setDriverClass("com.mysql.jdbc.Driver");
}catch(PropertyVetoException e) {
e.printStackTrace();
}
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUser("root");
dataSource.setPassword("root");
dataSource.setInitialPoolSize(20);
dataSource.setMaxPoolSize(100);
dataSource.setMinPoolSize(10);
System.out.println("DBConnection配置完成!");
}
publicstaticDBConnection getInstance() {
System.out.println("DBConnection getInstance()");
returnDBConnectionHolder.INSTNACE;
}
publicConnection getConnection() {
Connection conn =null;
try{
conn = dataSource.getConnection();
}catch(SQLException e) {
e.printStackTrace();
}
returnconn;
}
publicstaticvoidmain(String[] args)throwsException {
longstart = System.currentTimeMillis();
for(inti =0; i <100; i++) {
Connection conn = DBConnection.getInstance().getConnection();
conn.close();
}
longend = System.currentTimeMillis();
System.out.println(end - start);
}
}
2、
packagecom.test.jdbc;
importjava.io.Serializable;
importjava.sql.Connection;
importjava.sql.SQLException;
importorg.apache.commons.dbcp.BasicDataSource;
importorg.apache.commons.dbcp.DataSourceConnectionFactory;
publicclassDBConnectionimplementsSerializable {
privatestaticBasicDataSource dataSource =null;
privatestaticDataSourceConnectionFactory dataSourceFactory =null;
privateDBConnection() {
dataSource =newBasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUsername("root");
dataSource.setPassword("root");
dataSource.setInitialSize(20);
dataSource.setMaxActive(1000);
dataSource.setMaxIdle(20);
dataSource.setMinIdle(10);
dataSourceFactory =newDataSourceConnectionFactory(dataSource);
}
privatestaticclassSingletonHolder {
staticfinalDBConnection INSTANCE =newDBConnection();
}
publicstaticDBConnection getInstance() {
System.out.println("I am getInstance()");
returnSingletonHolder.INSTANCE;
}
publicConnection getConnection()throwsSQLException {
returndataSourceFactory.createConnection();
}
publicstaticvoidmain(String[] args)throwsSQLException {
longbegin = System.currentTimeMillis();
for(inti =0; i <1000; i++) {
Connection conn = DBConnection.getInstance().getConnection();
conn.close();
}
longend = System.currentTimeMillis();
System.out.println(end - begin);
}
}
package com.daqing.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 单例模式会有一个实例;会new一次
* 单例模式不使用静态的
* A0102JdbcUtilsSingletonRetard
* 意思:jdbc工具类,单例,延迟加载就是用到的时候再new
* @author Administrator
*
*/
public final class A0103JdbcUtilsSingletonRetard {
private String url = "jdbc:mysql://127.0.0.1:3306/jdbc";
private String user = "root";
private String password = "root";
/**
* 预初始化
*/
private static A0103JdbcUtilsSingletonRetard instance = null;
private A0103JdbcUtilsSingletonRetard(){
}
/**
* 加锁模式,双重检查,防止重复的new
* @return
*/
public static A0103JdbcUtilsSingletonRetard getInstacce(){
if(instance==null){
synchronized (A0103JdbcUtilsSingletonRetard.class) {
if(instance==null){
instance = new A0103JdbcUtilsSingletonRetard();
}
}
}
return instance;
}
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new ExceptionInInitializerError(e);
}
}
public Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, user, password);
}
public void free(ResultSet rs, PreparedStatement ps, Connection conn){
try {
if(rs!=null){
rs.close();
}
} catch (SQLException e) {
System.out.println("ResultSet关闭发生异常...");
} finally {
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
System.out.println("PreparedStatement关闭发生异常...");
} finally {
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
System.out.println("Connection关闭发生异常...");
}
}
}
}
}
}
}
package com.daqing.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 单例模式会有一个实例;会new一次
* 单例模式不使用静态的
* A0102JdbcUtilsSingletonRetard
* 意思:jdbc工具类,单例,延迟加载就是用到的时候再new
* @author Administrator
*
*/
public final class A0103JdbcUtilsSingletonRetard {
private String url = "jdbc:mysql://127.0.0.1:3306/jdbc";
private String user = "root";
private String password = "root";
/**
* 预初始化
*/
private static A0103JdbcUtilsSingletonRetard instance = null;
private A0103JdbcUtilsSingletonRetard(){
}
/**
* 加锁模式,双重检查,防止重复的new
* @return
*/
public static A0103JdbcUtilsSingletonRetard getInstacce(){
if(instance==null){
synchronized (A0103JdbcUtilsSingletonRetard.class) {
if(instance==null){
instance = new A0103JdbcUtilsSingletonRetard();
}
}
}
return instance;
}
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new ExceptionInInitializerError(e);
}
}
public Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, user, password);
}
public void free(ResultSet rs, PreparedStatement ps, Connection conn){
try {
if(rs!=null){
rs.close();
}
} catch (SQLException e) {
System.out.println("ResultSet关闭发生异常...");
} finally {
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
System.out.println("PreparedStatement关闭发生异常...");
} finally {
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
System.out.println("Connection关闭发生异常...");
}
}
}
}
}
}
}