日期:2014-05-18  浏览次数:20696 次

关于JSP的连接池的问题?
同一个连接使用次数过多,将会导致连接的不稳定,进而会导致WEB   SERVER的频频重启。因此就需要用到连接池。
那里连接池怎么建立咯。连接池内部的管理怎么做咯!!

急急急急急急急急急急急急急!!!!!!!!!!!

------解决方案--------------------
tomcat容器下:
可以在server.xml配置数据源,在程序中就可以去取,不用自己去管理了!...
server.xml
在 <host> 里面加入:
<Context docBase= "DaxWebMonitor " path= "/path "
reloadable= "true "
source= "org.eclipse.jst.j2ee.server:path ">
<Resource name= "jdbc/myoracle " auth= "Container "
type= "javax.sql.DataSource " />

<ResourceParams name= "jdbc/myoracle ">
<parameter>
<name> factory </name>
<value>
org.apache.commons.dbcp.BasicDataSourceFactory
</value>
</parameter>
<parameter>
<name> driverClassName </name>
<value>
oracle.jdbc.driver.OracleDriver
</value>
</parameter>
<parameter>
<name> url </name>
<value>
jdbc:oracle:thin:@ip:1521:db
</value>
</parameter>
<parameter>
<name> username </name>
<value> username </value>
</parameter>
<parameter>
<name> password </name>
<value> password </value>
</parameter>
<parameter>
<name> maxActive </name>
<value> 20 </value>
</parameter>
<parameter>
<name> maxIdle </name>
<value> 10 </value>
</parameter>
<parameter>
<name> maxWait </name>
<value> -1 </value>
</parameter>
</ResourceParams>
</Context>


web.xml加入引用:
<resource-ref>
<description> Oracle Datasource </description>
<res-ref-name> jdbc/myoracle </res-ref-name>
<res-type> javax.sql.DataSource </res-type>
<res-auth> Container </res-auth>
</resource-ref>

在你的代码里如下去取:
initContext = new InitialContext();
Context envContext = (Context) initContext.lookup( "java:/comp/env ");
DataSource ds = (DataSource) envContext.lookup( "jdbc/myoracle ");
conn= ds.getConnection();

用完就用conn.close释放连接!
完毕!
当然你也可以自己去实现一个自己的连接池......

------解决方案--------------------
以前用过的一个简单连接池实现:

***************** DBConnPool.java *********************
import java.sql.*;
import java.util.*;

/*连接池类.能够根据要求创建新连接,直到最大连接数为止.*/
public class DBConnPool {
//实际使用中的连接数
public int inUse = 0;
//空闲连接
private Vector connections = new Vector();
//连接池名
private String poolname;
//数据库标识
private String dbid;
//驱动程序名
private String drivername;
//数据库账号
private String username;
//数据库密码
private String passwd;
//最大连接数
private int maxconn;

public DBConnPool(String poolname, String drivername, String dbid,
String username, String passwd, int maxconn) {