如何查询数据库连接不释放,和java程序一直进行链接,这种问题怎么处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查询数据库连接不释放,和java程序一直进行链接,这种问题怎么处理相关的知识,希望对你有一定的参考价值。

你现在遇到了连接不释放的问题?

在每一次openconnection后。你拥有 connection、Resultset、Statement的对象

这三个东西需要依次释放 不然连接将持续开启。

依次执行
rs.close();
stmt.close();
conn.close();

才能释放当前连接。追问

我用的是数据库连接池,spring控制的,但是有时候执行了一个sql或者什么原因,就一直连接不释放,这样会带动其他的操作也连接不释放了。

追答

请检查:

#回收被遗弃的(一般是忘了释放的)数据库连接到连接池中。 dataBase.removeAbandoned =false
# 数据库连接过多长时间不用将被视为被遗弃而收回连接池中。 dataBase.removeAbandonedTimeout = 30
# 将被遗弃的数据库连接的回收记入日志。 dataBase.logAbandoned = false
#连接池的最大数据库连接数,设为0 表示无限制。 dataBase.maxActive = 200
#数据库连接的最大空闲连接数。超过此空闲连接数,,数据库连接将被标记为不可用,然后被释放。设为0 表示无限制。 dataBase.maxIdle=40
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1 表示无限制dataBase.maxWait=10000
#取得、返回对象和空闲时是否进行验证,检查对象是否有效,默认都为false即不验证
dataBase.testOnBorrow=true
dataBase.testWhileIdle=true
dataBase.testOnReturn=true
dataBase.validationQuery=select 1 from dual

参考技术A 不调用close()方法就不会释放连接,可以继续使用connction对象的。不过长连接一旦连接出问题断开会出空指针错误。建议写个连接池,每次从池中取连接,用完了把连接返回到池中。 参考技术B 一般是这样的,打开连接 --> 取数据处理-->关闭连接,下次再查重复刚才的操作 参考技术C 用完调用close方法

以上是关于如何查询数据库连接不释放,和java程序一直进行链接,这种问题怎么处理的主要内容,如果未能解决你的问题,请参考以下文章

sql server block如何查询并kill

oracle查询未释放连接的sql

oracle连接数过多 如何释放

oracle数据库用了定时器查询数据库,每一分钟查询一次,一段时间后导致数据库最大连接数太大

ORACLE 如何查询被锁定表及如何解锁释放session

c++的程序结束后,还有可能一部分数据留在物理内存,没有被释放吗?