2006 年,我为 Oracle-Connections 编写了自己的 JDBC-connection-pooling。我已经将集合存储在一个 Vector 中,每天晚上我都会实例化一个新的 Vector 对象来初始化连接池:
连接 = 新向量(池大小);
因此,垃圾收集器删除了所有现有连接,Oracle 删除了这些连接。
老实说,这是一个非常糟糕的解决方案 - 但它可以运行 12 年没有问题!
今年,我们将 Oracle 版本更新为 12.2.0.1.0,并且我在我的高级程序中更新了 Oracle-JDBC 驱动程序。
我目前使用的是从这个网站下载的 Oracle Database 12.2.0.1 JDBC Driver (ojdbc8.jar):
https://www.oracle.com/technetwork/database/features/jdbc/jdbc-ucp-122-3110062.html
数据库访问工作正常 - 除了我糟糕的连接池。在调用“connections = new Vector(poolsize)”之后,Oracle-DB 不会删除打开的连接,并且打开的 JDBC 连接的数量每天都在增加 - 直到 Oracle 崩溃(打开的 JDBC 连接太多)。
我知道我必须用 close() 关闭每个 JDBC 连接,而不是只初始化包含集合的 Vector。但我想知道为什么新的 Oracle JDBC 驱动程序在垃圾收集运行后没有删除所有连接。
这是来自新 JDBC 驱动程序的错误吗?
在所有旧的 JDBC 驱动程序中,此错误不会发生 - 它仅在新的 ojdbc8.jar 中发生。
如果无法访问,JDBC 驱动程序应自动关闭所有与数据库相关的对象(例如 ResultSets)。我不相信每个 JDBC 开发人员都会在数据库操作完成后关闭 ResultSet 对象。我没有测试过ojdbc8.jar 是否会关闭这些未关闭的ResultSet-Objects,但是如果没有,将来某些程序会炸毁。
您认为新的 JDBC 驱动程序中是否存在错误,因为无法自动关闭无法访问的 JDBC 连接?
炎炎设计
相关分类