日期:2014-05-20  浏览次数:20835 次

求一个STRUTS2 SQLSERVER2000的连接池的代码,最好有个例子
如题,网上找了很久,没找到,以前只用过JSP MYSQL的连接池,实在不想花时间去一个个试了-_-

------解决方案--------------------
最近也在转换,mark
------解决方案--------------------
连接池不都是一样的用么?!
------解决方案--------------------
探讨
连接池不都是一样的用么?!

------解决方案--------------------
package com.cc.connectionpool;

import java.io.IOException;
import java.sql.*;
import java.util.Date;
import javax.management.StringValueExp;

public class ConnectionPool implements Runnable {
//private boolean _debug=false;
private Thread runner; //数据库池线程
private Connection[] connPool; //数据库池中的连接数组
private int[] connStatus; //记录连接池中每个连接的状态。
//当connStatus[i]=0时,代表连接可用,为1时代码被用户锁定,
// 值为2时代表被管理员线程锁定。
private long[] connLockTime; //记录每个连接被锁定的时间
private long[] connCreateTime; //记录每个连接被创建的时间
private String[] connID; //记录每个连接的标识号
private String dbdriver,dbserver,dbuser,dbpassword;
//dbdriver表示连接驱动,dbserver表示注册字符,dbuser表示用户,dbpassword表示用户口令
private int currConnections,connLast,minconns,maxconns,maxconnMSec;
private boolean available=true; //当连接池撤销时值为false,调用getConnetcion()方法时检查available
private SQLWarning currSQLWarning;

//定义两个构造方法,其中一个为默认参数
public ConnectionPool(String dbdriver,String dbserver,String dbuser,String dbpassword,int minconns,int maxconns,double maxconntime){
try {
initConnectionPool(dbdriver,dbserver,dbuser,dbpassword,minconns,maxconns,maxconntime);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
public ConnectionPool(){
try {
String dbdriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbserver="jdbc:sqlserver://localhost:1433;DatabaseName=Player";
String username="yuqing";
String password="1234";
initConnectionPool(dbdriver,dbserver,username,password,30,100,0.1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
*/
public void initConnectionPool(String dbdriver,String dbserver,String dbuser,String dbpassword,int minconns,int maxconns,double maxconntime)throws IOException{
connPool=new Connection[maxconns];
connStatus=new int[maxconns];
connLockTime=new long[maxconns];
connCreateTime=new long[maxconns];
connID=new String[maxconns];
currConnections=minconns;
this.dbdriver=dbdriver;
this.dbserver=dbserver;
this.dbuser=dbuser;
this.dbpassword=dbpassword;
maxconnMSec=(int)(maxconntime*3600*1000);
//maxconntime表示的是连接重置之间的最大时间差
if(maxconnMSec<60000){
maxconnMSec=60000;
}//当maxconnMSec小于一分钟,则赋值为一分钟
init();
runner=new Thread(this);
runner.start();
}

//下面是初始化方法,功能是建立指定初始个数的连接,若某个连接创建不成功,将等待15秒再继续访问数据库,
//此方法用一个dbLoop循环,使得等待时间超过5分钟将会输出错误
private void init(){
boolean connectionsSucceeded=false;
int dbLoop=20;
try{
for(int i=0;i<dbLoop;i++){
try{
for(int j=1;j<currConnections;j++){
createConn(j);
}
connectionsSucceeded=true;
break; //若每个连接都创建成功便跳出所有循环,初始化完毕。
}catch(SQLException e){
System.out.println("--->Attempt("+String.valueOf(i)+"of"+String.valueOf(dbLoop)+")failed to create new connections set at startup:");
System.out.println(" "+e);
System.out.println(" Will try again in 15 seconds...");
e.printStackTrace();
try{
Thread.sleep(15000);//若创建某连接不成功,则等待15秒后继续尝试去连接数据库,本方法最外层的循环执行20次,表明最大的等待时间为15*20=5分钟。