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 连接?
添加回答
举报
0/150
提交
取消