锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class ConnectionPool {
private List<Connection> pool;
private static final String Url = "jdbc:oracle:thin:@localhost:1521:XE";
private static final String USERNAME = "abing";
private static final String PASSWORD = "abing";
private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
private int poolSize = 10;
private static volatile ConnectionPool instance = null;
private ConnectionPool() {
init();
}
public void init() {
pool = new ArrayList<Connection>(poolSize);
addConnection();
}
public synchronized void release(Connection conn) {
pool.add(conn);
}
public synchronized void closePool() {
for (int i = 0; i < pool.size(); i++) {
try {
((Connection) pool.get(i)).close();
} catch (SQLException e) {
e.printStackTrace();
}
pool.remove(i);
}
}
public static ConnectionPool getInstance() {
if (null == instance) {
synchronized (ConnectionPool.class) {
if (null == instance) {
return new ConnectionPool();
}
}
}
return instance;
}
public synchronized Connection getConnection() {
if (pool.size() > 0) {
Connection conn = pool.get(0);
if(conn!=null){
System.out.println("Connection Pool Create Success");
}
pool.remove(conn);
return conn;
}else{
return null;
}
}
public void addConnection() {
Connection conn = null;
for (int i = 0; i < poolSize; i++) {
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(Url, USERNAME, PASSWORD);
pool.add(conn);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
package com.abin.lee.collection.pool;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.abin.lee.collection.threadlocal.UserBean;
public class TestConnectionPool {
public static List<UserBean> findAll(){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
String sql="select * from userbean order by id desc";
List<UserBean> list=new ArrayList<UserBean>();
UserBean user=null;
try {
conn=ConnectionPool.getInstance().getConnection();
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while (rs.next()&&rs!=null) {
user=new UserBean();
user.setId(rs.getString("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
list.add(user);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public static void main(String[] args) {
List<UserBean> list=findAll();
for(UserBean lst:list){
System.out.println("id="+lst.getId());
System.out.println("username="+lst.getUsername());
System.out.println("id="+lst.getPassword());
}
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
public class ConnectionManage {
private static List<Connection> pool=new LinkedList<Connection>();;
private static final String Url = "jdbc:oracle:thin:@localhost:1521:XE";
private static final String USERNAME = "abing";
private static final String PASSWORD = "abing";
private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
private static int initCount = 5;
private static int maxCount = 10;
private static int currentCount = 5;
private static volatile ConnectionManage instance = null;
private ConnectionManage(){
init();
}
public static ConnectionManage getInstance(){
if(null == instance){
synchronized (ConnectionManage.class) {
if(null == instance){
return new ConnectionManage();
}
}
}
return instance;
}
public void init(){
addConnection();
}
public static Connection createConnection() throws ClassNotFoundException {
Connection conn=null;
try {
Class.forName(DRIVER);
conn=DriverManager.getConnection(Url, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void addConnection(){
for(int i=0;i<initCount;i++){
try {
pool.add(createConnection());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
public static void release(Connection conn){
pool.add(conn);
}
public static Connection getConnection() throws SQLException, ClassNotFoundException{
synchronized (pool) {
if(pool.size()>0){
System.out.println("Current Connection size is:"+pool.size());
return pool.get(0);
}else if(currentCount<maxCount){
Class.forName(DRIVER);
Connection conn=createConnection();
pool.add(conn);
currentCount++;
return conn;
}else{
throw new SQLException("Current Connection is Zero");
}
}
}
}
package com.abin.lee.collection.pool;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.abin.lee.collection.threadlocal.UserBean;
public class TestConnectionPool {
public static List<UserBean> findAll(){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
String sql="select * from userbean order by id desc";
List<UserBean> list=new ArrayList<UserBean>();
UserBean user=null;
try {
conn=ConnectionManage.getInstance().getConnection();
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while (rs.next()&&rs!=null) {
user=new UserBean();
user.setId(rs.getString("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
list.add(user);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public static void main(String[] args) {
List<UserBean> list=findAll();
for(UserBean lst:list){
System.out.println("id="+lst.getId());
System.out.println("username="+lst.getUsername());
System.out.println("id="+lst.getPassword());
}
}
}
涓嬮潰鏄互鍓嶅java 鐨勬椂鍊欏啓鐨勪竴涓疄鐜幫紝娌℃湁鑰冭檻寰堝錛屾瘮濡傚悓姝ュ鐞嗙瓑絳夈傛噿寰楁敼錛屼綘灝辯湅鐪嬪惂銆?/p>
package com.wangjia.tools;
import java.io.Serializable;
import java.sql.*;
import java.util.*;
/**
* 鏁版嵁搴撹繛鎺ユ睜鐨勭畝鍗曞疄鐜?br />* @author wangjia
* @version 1.0
*@serial 2301410997974776106L
*/
public class DbConn implements Serializable{
/**
*
*/
private static final long serialVersionUID = 2301410997974776106L;
private static List<Connection> connList=new ArrayList<Connection>();
//private static String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";//sql2000
private static String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";//sql2005
private static String url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Forum";
private static String userName="sa";
private static String password="sa";
private static int maxConn=20;
private static int minConn=5;
private static int usedConn=0;
private static DbConn dbconn=null;
// private static int flag=1;
/**
* 璁?a style="border-bottom: rgb(0,85,153) 1px dotted; color: rgb(0,85,153); text-decoration: none" target="_blank">緗暟鎹?/a>搴撹繛鎺ョ殑椹卞姩
* @param driver 鏁版嵁搴撹繛鎺?/a>鐨勯┍鍔?lt;br/>渚嬪:"com.microsoft.sqlserver.jdbc.SQLServerDriver"
*/
public static void setDriver(String driver) {
DbConn.driver = driver;
}
/**
* 璁劇疆鏁版嵁搴?a style="border-bottom: rgb(0,85,153) 1px dotted; color: rgb(0,85,153); text-decoration: none" target="_blank">榪炴帴姹?/a>鐨勬渶灝忔暟閲?br />* @param maxConn 鏁版嵁搴撹繛鎺ユ睜鐨勬渶灝忔暟閲?br />*/
public static void setMaxConn(int maxConn) {
DbConn.maxConn = maxConn;
}
/**
* 璁劇疆鏁版嵁搴撹繛鎺ユ睜鐨勬渶澶ф暟閲?br />* @param minConn 鏁版嵁搴撹繛鎺ユ睜鐨勬渶澶ф暟閲?br />*/
public static void setMinConn(int minConn) {
DbConn.minConn = minConn;
}
/**
* 璁劇疆鏁版嵁搴撹繛鎺ョ殑URL
* @param url 鏁版嵁搴撹繛鎺ョ殑URL,鍖呮嫭鏁版嵁搴?/a>鐨勫悕縐?lt;br/>渚嬪: "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=master"
*/
public static void setUrl(String url) {
DbConn.url = url;
}
private DbConn() throws MyException{
try{
Class.forName(driver);
for(int i=0;i<minConn;i++){
connList.add(DriverManager.getConnection(url,userName.toString(),password.toString()));
}
}catch(ClassNotFoundException e){
throw new MyException("璇瘋緗紜殑鏁版嵁搴撹繛鎺ラ┍鍔?\nusing: DbConn.setDriver(String driver)");
}catch(SQLException e){
throw new MyException("璇瘋緗紜殑鏁版嵁搴撹繛鎺RL浠ュ強鐢?a style="border-bottom: rgb(0,85,153) 1px dotted; color: rgb(0,85,153); text-decoration: none" target="_blank">浜庤繛鎺ョ殑鐢ㄦ埛鍚嶅拰瀵嗙爜!\n" +
"using: DbConn.setUrl(String url),DbConn.setUserName(String userName),DbConn.setPassword(String password)");
}
}
/**
* 鐢ㄤ簬寰楀埌DbConn瀵硅薄
* @return 榪斿洖涓涓狣bConn瀵瑰儚
*/
public static Connection getConn() throws MyException{
// flag++;
if(dbconn==null)dbconn=new DbConn();
// System.out.println("falg="+flag);
// System.out.println("usedConn="+usedConn);
if(connList.size()==0){
throw new MyException("娌℃湁姝g‘鐨勮緗浉鍏充俊鎭?浠ヨ嚦榪炴帴姹犳湭鍒濆鍖?);
}
if(usedConn==maxConn){
Thread thread=new Thread(new Runnable(){
@SuppressWarnings("static-access")
public void run() {
if(usedConn<maxConn){
try {
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
getConn();
} catch (MyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
thread.start();
}
if(usedConn>=minConn&&usedConn<maxConn){
try {
connList.add(DriverManager.getConnection(url,userName.toString(),password.toString()));
} catch (SQLException e) {
}
return connList.get(usedConn++);
}
if(usedConn<5){
return connList.get(usedConn++);
}
return null;
}
public static void close(){
try {
if(usedConn>5)
connList.get(--usedConn).close();
else usedConn--;
} catch (SQLException e) {
// TODO 鑷姩鐢熸垚 catch 鍧?br />e.printStackTrace();
}
}
/**
* 璁劇疆鐢ㄤ簬榪炴帴鏁版嵁搴撶殑瀵嗙爜
* @param password 鐢ㄤ簬榪炴帴鏁版嵁搴撶殑瀵嗙爜
*/
public static void setPassword(String password) {
DbConn.password = password;
}
/**
* 璁劇疆鐢ㄤ簬榪炴帴鏁版嵁搴撶殑鐢ㄦ埛鍚?br />* @param userName 鐢ㄤ簬榪炴帴鏁版嵁搴撶殑鐢ㄦ埛鍚?br />*/
public static void setUserName(String userName) {
DbConn.userName = userName;
}
}
鍦ㄩ」鐩腑鐢ㄥ埌榪炴帴姹犵殑璇濓紝涓鑸細鐩存帴浣跨敤宸叉湁鐨勫紑婧愯繛鎺ユ睜瀹炵幇錛屾瘮濡傜敤 apache 鐨刢ommon-dbcp.jar鍜宑ommon-pool.jar 鐩哥粨鍚堬紝寰堝皯鍘昏嚜宸卞疄鐜般?/p>