利用tomcat配置数据库连接池
1。写一个属性文件dbconfig.properties
dbType=oracle9i
driver_class=oracle.jdbc.driver.OracleDriver
host_name=127.0.0.1
port=1521
url=jdbc:oracle:thin:@
username=scott
password=tiger
dbsid=sk
2.建立连接池DBConnectionPool.java
packagecom.sk.javaWeb.utils.dataBase;
importjava.io.IOException;
importjava.io.InputStream;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.Date;
importjava.util.Enumeration;
importjava.util.Properties;
importjava.util.Vector;
publicclassDBConnectionPool{
privatestaticDBConnectionPoolinstance=null;
//连接池的名字,因为可能会有多个连接池,依靠名字来对他们进行区分,因为现在只有一个Oracle连接池,所以没什么在用在这里
privateStringname;
//连接字符串
privateString_url="";
//驱动
privateStringdriver="";
//用户名
privateStringusername="";
//密码
privateStringpassword="";
//最大连接数
privateintmaxConn=20;
//当前连接数
privateintcurConn=0;
//空闲的连接
privateVector<Connection>freeConns=newVector<Connection>();
privateDBConnectionPool(){
init();
}
publicvoidinit(){
InputStreamin=this.getClass().getResourceAsStream(
"/com/sk/javaWeb/utils/dataBase/dbconfig.properties");//以流的形式读入属性文件
Propertiesprops=newProperties();
try{
props.load(in);
driver=props.getProperty("driver_class");
username=props.getProperty("username");
password=props.getProperty("password");
_url=props.getProperty("url")+props.getProperty("host_name")
+":"+props.getProperty("port")+":"
+props.getProperty("dbsid");
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticDBConnectionPoolgetInstance(){
if(instance==null){
instance=newDBConnectionPool();
}
returninstance;
}
//获得一个连接,如果没有空闲连接并且当前连接数小于最大连接数,就创建一个连接
publicsynchronizedConnectiongetConnection(){
Connectionconn=null;
if(freeConns.size()>0){
//得到空闲连接里面第一个连接
conn=freeConns.firstElement();
freeConns.removeElementAt(0);
try{
//如果得到的这个连接失效了,就释放掉他,然后重新递归的调用本方法
if(conn.isClosed()){
conn=getConnection();
}
}catch(SQLExceptione){
e.printStackTrace();
conn=getConnection();
}
//如果现在没有空闲连接,并且当前连接数小于最大连接数,就新创建一个连接
}elseif(curConn<maxConn){
conn=newConnection();
}
if(conn!=null){
curConn++;
}
returnconn;
}
/**
*从连接池获取可用连接.可以指定客户程序能够等待的最长时间参见前一个getConnection()方法.
*
*@paramtimeout以毫秒计的等待时间限制
*/
publicsynchronizedConnectiongetConnection(longtimeout){
longstartTime=newDate().getTime();
Connectioncon=null;
while((con=getConnection())==null){
try{
wait(timeout);
}catch(InterruptedExceptione){
e.printStackTrace();
}
if((newDate().getTime()-startTime)>=timeout){//wait()返回的原因是超时
returnnull;
}
}
returncon;
}
privateConnectionnewConnection(){
Connectioncon=null;
try{
Class.forName(driver);
con=DriverManager.getConnection(_url,username,password);
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returncon;
}
//释放一个连接
publicsynchronizedvoidfreeConn(Connectionconn){
freeConns.addElement(conn);
curConn--;
notifyAll();
}
//关闭所有连接
publicvoidfreeAllConns(){
Enumeration<Connection>conns=freeConns.elements();
while(conns.hasMoreElements()){
Connectionconn=conns.nextElement();
try{
conn.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}
//除去空闲连接当中的所有连接
freeConns.removeAllElements();
}
publicintgetRowCount(Stringsql){
Connectionconn=getConnection();
introwCount=0;
PreparedStatementps=null;
ResultSetrs=null;
try{
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
if(rs.next()){
rowCount=rs.getInt(1);
}
}catch(SQLExceptione){
e.printStackTrace();
}finally{
try{
if(ps!=null){
ps.close();
}
if(conn!=null){
this.instance.freeConn(conn);
}
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
returnrowCount;
}
}
3.获得连接ConnectionPool.java
packagecom.sk.javaWeb.utils.dataBase;
importjava.sql.Connection;
importjava.sql.SQLException;
importjavax.naming.Context;
importjavax.naming.InitialContext;
importjavax.naming.NamingException;
importjavax.sql.DataSource;
/**
*tomcat配置数据库连接池
*@author沈奎
*日期:2009-9-19下午03:21:43
*版本:0.1
*/
publicclassConnectionPool{
privatestaticConnectionconn=null;
privatestaticDataSourcedataSource=null;
publicstaticConnectiongetConnection(){
try{
Contextcontext=newInitialContext();
dataSource=(DataSource)context.lookup("java:comp/env/oracle");
if(dataSource!=null){
conn=dataSource.getConnection();
}
}catch(NamingExceptione){
e.printStackTrace();
}catch(SQLExceptione){
e.printStackTrace();
}
returnconn;
}
}