数据库连接应始终保持打开状态还是仅在需要时打开?

时间:2013-09-23 15:13:10

标签: java mysql jdbc bukkit

我有一个需要连接数据库的bukkit插件(minecraft)。

数据库连接是否应始终保持打开状态,或在需要时打开和关闭?

6 个答案:

答案 0 :(得分:19)

数据库连接必须仅在需要时打开,并在完成所有必要的工作后关闭。代码示例:

  • 在Java 7之前:

    Connection con = null;
    try {
        con = ... //retrieve the database connection
        //do your work...
    } catch (SQLException e) {
        //handle the exception
    } finally {
        try {
            if (con != null) {
                con.close();
            }
        } catch (SQLException shouldNotHandleMe) {
            //...
        }
    }
    
  • Java 7:

    try (Connection con = ...) {
    } catch (SQLException e) {
    }
    //no need to call Connection#close since now Connection interface extends Autocloseable
    

但由于手动打开数据库连接太昂贵,强烈建议使用database connection pool。这将为您处理物理数据库连接,当您关闭它(即调用Connection#close)时,物理数据库连接将处于休眠模式并仍然处于打开状态。

相关问答:

一些处理数据库连接池的工具:

答案 1 :(得分:3)

取决于您的需求。

创建连接需要一些时间,因此如果您需要经常访问数据库,最好保持连接打开。此外,最好创建一个池,以便许多用户可以同时访问数据库(如果需要)。

如果您只需要几次使用此连接,则可能无法保持打开状态,但是当您想要访问数据库时会有延迟。所以我建议你制作一个能让连接保持打开一段时间的计时器(连接超时)。

答案 2 :(得分:2)

实际上,关于如何编写应用程序,这一切都很重要!这是一门艺术,但遗憾的是每个人都会参加微软教程等良好练习的教程。

如果您知道自己编码的是什么,那么您可以在应用程序的生命周期内保持连接打开状态。这很简单,不是因为你必须在早上上班,每天我们必须为你建立一条特殊的路线!你采取单一路线或2或4像每个人一样!您可以判断流量,并根据需要构建2,4或6条路径。如果有这4或6条路线的交通,你等一下!

快乐的编码。

答案 3 :(得分:2)

您需要在每次执行查询后关闭连接。有时您需要同时执行多个查询,因为查询是相互挂起的。例如“首先插入任务然后将其分配给员工”。这个time对同一事务执行查询并提交它,如果发生某些错误则回滚。在JDBC中禁用默认自动提交。 Example

使用连接池。如果您正在开发Web应用程序,那么使用App Server连接池.App服务器将为每个应用程序使用相同的池,以便您可以从一点控制连接计数。强烈推荐Apache Tomcat连接池。Example

作为附加信息: 连接,语句和ResultSet。

1.如果您关闭连接,则不需要关闭语句或结果集。它们中的任何一个都将自动关闭

2.如果你关闭Statement,它也将关闭ResultSet

3.如果你使用像这样的资源尝试:

try (Connection con = ...) {
} catch (SQLException e) {
}

它将自动关闭连接。因为try-with-resources需要可自动关联的对象而Connection是自动关闭的。您可以看到有关try-with-resources的详细信息here

答案 4 :(得分:0)

只有在需要时才能打开Connection。如果它在实际需要之前打开,它会从连接池中减少一个活动连接。因此它最终会影响应用程序的用户。

因此,最好只在需要时打开连接并在完成流程后关闭它。

总是尝试在finally块中推送连接关闭逻辑,这将确保您的连接将被关闭,即使应用程序中发生任何异常

finally
{
connection.close()
}

答案 5 :(得分:-4)

每次连接都会有延迟,现在想象如果你总是连接并关闭会发生什么