但现在主要是出现了第(2)个问题:(1)如果不关闭 connecton 的话,过了最大连接数就出现如下错误:2005/03/17 15:09:00:338 CST [ERROR] error <java.sql.SQLException: DBCP could not obtain an idle db connecti
on, pool exhausted>java.sql.SQLException: DBCP could not obtain an idle db conne
ction, pool exhausted
at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObj
ectPool.java:123)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSo
urce.java:110)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource
.java:312)
(2)但如果关了的话,重复用了几次该连接池后,又得到如下的提示:2005/03/17 15:17:27:037 CST [ERROR] error <java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has
been closed.>java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]
Object has been closed.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source
)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.validateClosedState(Unknown So
urce)
at com.microsoft.jdbc.base.BaseConnection.createStatement(Unknown Source
)
at com.microsoft.jdbc.base.BaseConnection.createStatement(Unknown Source
)
at org.apache.commons.dbcp.DelegatingConnection.createStatement(Delegati
ngConnection.java:172)----------------------------怎么回事???
on, pool exhausted>java.sql.SQLException: DBCP could not obtain an idle db conne
ction, pool exhausted
at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObj
ectPool.java:123)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSo
urce.java:110)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource
.java:312)
(2)但如果关了的话,重复用了几次该连接池后,又得到如下的提示:2005/03/17 15:17:27:037 CST [ERROR] error <java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has
been closed.>java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]
Object has been closed.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source
)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.validateClosedState(Unknown So
urce)
at com.microsoft.jdbc.base.BaseConnection.createStatement(Unknown Source
)
at com.microsoft.jdbc.base.BaseConnection.createStatement(Unknown Source
)
at org.apache.commons.dbcp.DelegatingConnection.createStatement(Delegati
ngConnection.java:172)----------------------------怎么回事???
解决方案 »
- 求教服务器项目访问问题
- String ...args和String args[]是相同的意思吗
- 江湖救急,struts1判断问题!!!
- 请问如何知道一个JAVA文件属于哪个JAR?
- The absolute uri: http://struts.apache.org/tags-bean cannot be resolved in either web.xml or the jar files deployed with this ap
- 怎样调试通过ant部署到tomcat上的Web程序
- 如何让一个页面只显示一个月的数据,就像日历格式那样,如果想看上一个月或一下个月同样可以实现?
- 在TOMCAT中如何部署一个JSP文件
- 学生 请高手帮忙, 想想思路!!!!!
- 生僻字显示为乱码,如能解决还可加分。
- 文件路径,急需高人指点。
- 求救:如何实现用Java打印报表的功能
Connection connection = datasource.getConnection();String params = querySomeParams(connection);others(params);connection.close();}void others(String params) {
.... /* 说明:这个新开的连接是指向数据库 Testdb2 */ Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection conn = DriverManager.getConnection(URL,userName,password);
....
conn.close();
}说明的一点是:上面的两个连接,都是用到了同样的驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver只是URL不同,而且该驱动是放在 Tomcat 的 share/lib 目录下!------------------------另外,发现如果不调用 others 方法,其他方法无论使用多少次都不会出现(2)的情况!!!是什么冲突了吗????
Connection connection = datasource.getConnection();String params = querySomeParams(connection);others(params);connection.close();}void others(String params) {
.... /* 说明:这个新开的连接是指向数据库 Testdb2 */ Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection conn = DriverManager.getConnection(URL,userName,password);
....
conn.close();
}说明的一点是:上面的两个连接,都是用到了同样的驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver只是URL不同,而且该驱动是放在 Tomcat 的 share/lib 目录下!------------------------另外,发现如果不调用 others 方法,其他方法无论使用多少次都不会出现(2)的情况!!!是什么冲突了吗????
[应该关闭,但是这个关闭的意思不是说关掉连接,而是把连接重新放到连接池里面,等待下次的调用。]不是下面这个关吗?connection.close();
我觉得应该称为释放连接而不是关闭连接吧!释放连接就是将连接返还到连接池中,如果连接使用完成之后就直接关闭,那连接池不就失去作用了吗?
]不是下面这个做法吗?connection.close();
.... /* 说明:这个新开的连接是指向数据库 Testdb2 */ Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection conn = DriverManager.getConnection(URL,userName,password);
....
conn.close();
}
[
让我不理解的是,你这个others方法为什么又要自已去创建连接,而不从池中去取得连接呢?struts是支持多数据源的呀?还有你出第(2)个问题的异常时,是程序执行到conn.close();还是执行到connection.close();时抛出的呀?
]注意是在有others方法被执行时,重复执行Action的execute方法多次后,出现(2)问题,肯定不是 others 方法里面的错误,因为在others里面没显示任何错误!至于所说的“为什么又要自已去创建连接,而不从池中去取得连接”,是因为只有驱动程序是固定不变的,但数据库连接 URL 是用户自己填的(可自定义连接用户的数据库),所以不能用配置的数据源中取!
其它方式得到的连接,在调用close()方法时,会关闭实际的数据库连接
无论用哪种方式,都应该在使用过后调用方法close(),以释放资源。
[
从连接池中取出的连接,在调用close()方法时,它实际上是将连接返回到池中,等待下次调用,并不会关闭连接,这是通过java的代理机制(实现一个java.lang.reflect.InvocationHandler接口)来实现的,不关闭将会导致连接创建更多的连接,在设定了最大连接数的连接池中,有可能没有连接可用。
其它方式得到的连接,在调用close()方法时,会关闭实际的数据库连接
无论用哪种方式,都应该在使用过后调用方法close(),以释放资源。
]重写了一个连接池,用了 InvocationHandler ,的确是这样!发现这样用连接池非常好!但我说的第(2)个问题还是一样!-_-!!!