谁有Tomcat中使用连接池的完整的例子,主要是在代码中如何关闭连接池?从网上找到的方法,再使用了一阵后,数据连接就穷尽了(ORACLE已调整结过了),谁有代码?jshawzh@hotmail.com
在使用connection的method结束前将connection.close()放在try {} catch {} finally{}的finally{}模块中
server.xml
<Context path="/doc" docBase="doc" debug="0" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_DBTest_log." suffix=".txt" timestamp="true"/>
<Resource name="jdbc/MysqlDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/MysqlDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>123</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://192.168.16.100:1433;DatabaseName=MyData</value>
</parameter>
</ResourceParams>
</Context>
web.xml 中
<web-app>
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/MysqlDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
使用
import java.sql.*;
import javax.naming.*;
public class DBSQL {
public static Connection getConnection() {
try {
Context initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup("java:comp/env");
//获取连接池对象
Object obj = (Object) ctx.lookup("jdbc/MysqlDB");
//类型转换
javax.sql.DataSource ds = (javax.sql.DataSource) obj;
Connection conn = ds.getConnection();
return conn;
conn.close();
conn = null;
}
catch (Exception ex) {
ex.printStackTrace();
return null;
}finally{
if(conn != null){
conn.close();
}
}
}
}
最后的这几句话就是关闭数据库连接的语句,当然statement也要关闭,把它放在你的调用sql的结束的地方即可
conn.close();
conn = null;
finally{
if(conn != null){
conn.close();
}
}
我想楼主想要问的是:
在使用完连接以后如何将这个连接归还到连接池,
而不是上面各位所说的将连接关闭掉[ connection.close() ]
楼主是不是这个意思?
连接池本身就是一种动态托管
在你代码中coon.close()
实际上并没有关闭和数据库的连接
而是将连接返回到了连接池中的连接管理机制,并由该机制完成对资源的释放
并将释放之后的资源---也就是空的CONNECT返回到空池中
所以页面或者SERVLET中调用
conn.close();
conn = null;
finally{
if(conn != null){
conn.close();
}
}
此段代码时,资源就可以得到释放了
赫赫,很多人很奇怪
为什么光闭连接时调用conn.close();而不是象releaseConn(conn)这样的函数来光闭
看下面的代码
public class myConnection extends Connection
{
void close()
{
DBPool.releaseConn(this);
}
}
明白了吗?
调用conn.close()的时候实际上不一定调用是Connection.close这个方法