java - 多个方法调用中何时关闭连接

标签 java jdbc connection

我有以下情况:

MethodA() calls MethodB()
MethodB() calls MethodC()

所有方法都必须对数据库执行一些查询。因此,为此,我创建一个连接对象并将其沿着方法链传递以重用该连接对象。

此处假设未使用连接池。

现在我的问题是,
应该只打开和重用一个连接,并在起点关闭(在上面的示例中,连接将在方法A中打开和关闭)?
还是
我应该为每个方法创建一个单独的连接?

重用连接似乎更好,但随后我必须保持连接打开,直到控件返回到 MethodA()。

我读到,重用连接更好,因为创建它们的成本很高。但后来我还了解到,最好尽快关闭连接,即在完成查询调用后。

哪种方法更好,为什么?

最佳答案

听起来您只是在查询数据库而不是更新或插入。如果是这种情况,那么您可以避免此类嵌套过程调用中的许多事务语义。

如果这是真的,那么只需连接一次,执行所有查询并关闭连接。虽然连接池的使用与您的问题有些正交 - 如果可以的话请使用一个。它们极大地简化了您的代码,因为您可以让池在向您提供连接之前自动测试连接。如果连接丢失(假设数据库被退回),它将自动创建一个新连接。

最后,您希望尽量减少创建数据库连接的次数,因为它的成本很高。然而,这通常并不简单。数据库本身仅支持最大连接数。如果有很多客户,那么您需要考虑这一点。如果您有一种简单的情况 - 一个数据库,而您的程序是唯一建立连接的程序,则打开该连接并在程序运行期间保持打开状态。这需要您对其进行验证,因此使用大小为 1 的数据库池可以避免这种情况。

关于java - 多个方法调用中何时关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38662984/

相关文章:

java - 递归重试一些异常

java - Resultset.getDate() 抛出异常 java.lang.NumberFormatException : For input string: "Name of Month"

java.sql.DataTruncation : Data truncation exception and LIKE operator relation

linux - 树莓派2 : routing table has no the specified gateway

php - 具有扩展 PDOStatement 的 PDO 在设置 NULL 时无法断开连接

mysql - 通过 localhost 连接 MySQL 不工作但 127.0.0.1 工作

java - Java中静态类型和动态类之间的区别

java - 如何在android中创建两个固定大小的 View 和跨越它们之间的一个 View ?

java - log4j2 JDBC Appender 问题 :Failed to Insert Record

java - 使用自定义类作为键时 Java 的 TreeMap 出现 ClassCastException