如何关闭java.sql.DataSource

如何关闭java.sql.DataSource,java,datasource,c3p0,Java,Datasource,C3p0,我们有一个按日期对数据进行分区的系统。 例如,在SqlServer中,每个月的数据有一个数据库。每个月分区使用一个包装在C3P0连接池中的Jdbc驱动程序数据源Datasource 一段时间后,分区的日期范围变得足够旧,我们希望使其脱机。在这种情况下,我们只需从可用列表中删除相关月份的数据源。 但是,理想情况下,在脱机时,我希望“关闭”数据源,以便池放弃与数据库的所有连接 DataSource没有可供我调用的close方法,因此我不确定如何清理该方法 有什么建议吗?您没有关闭数据源-您关闭了数据

我们有一个按日期对数据进行分区的系统。
例如,在SqlServer中,每个月的数据有一个数据库。每个月分区使用一个包装在C3P0连接池中的Jdbc驱动程序数据源
Datasource

一段时间后,分区的日期范围变得足够旧,我们希望使其脱机。在这种情况下,我们只需从可用列表中删除相关月份的
数据源。
但是,理想情况下,在脱机时,我希望“关闭”数据源
,以便池放弃与数据库的所有连接

DataSource
没有可供我调用的close方法,因此我不确定如何清理该方法


有什么建议吗?

您没有关闭
数据源
-您关闭了
数据源
返回的连接。
数据源
本身从来都不是这样“打开”的


我希望池在超时后会放弃打开的连接,所以我建议您不要担心:)如果您需要强制关闭连接,您需要保留对连接池本身的引用,并直接使用c3p0提供的任何设施。

看起来,如果您使用C3PO池化数据源,那么您可以使用来释放与数据源关联的线程和连接。

在我的情况下,@sudocode的答案不起作用,因此,我获得了汇集的数据源,并将其关闭:

ComboPooledDataSource datasource =
                (ComboPooledDataSource) envContext.lookup("jdbc/oracledb");
datasource.close();

我认为OP不仅想关闭数据源,还想删除整个C3P0连接池,这样就不会再管理到现在已过时的数据库的池连接。@David:他将从自己的列表中删除数据源,这将停止创建更多连接。。。但我认为他当时想要关闭任何现有的连接。@Jon-为了澄清,我希望池外没有活动连接,只有池中的空闲连接,我希望关闭这些连接。我将检查是否可以将其配置为空闲连接将断开eventually@JonSkeet如果我像这样调用close方法:
dataSource().getConnection().close()
这是否也会关闭我打开的preparedstatements和结果集以及连接?@Faraz:老实说,我不知道。