Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据库连接应该一直保持打开状态还是只在需要时打开?_Java_Mysql_Jdbc_Bukkit - Fatal编程技术网

Java 数据库连接应该一直保持打开状态还是只在需要时打开?

Java 数据库连接应该一直保持打开状态还是只在需要时打开?,java,mysql,jdbc,bukkit,Java,Mysql,Jdbc,Bukkit,我有一个bukkit插件(minecraft),需要连接到数据库 数据库连接应该一直保持打开状态,还是在需要时打开和关闭?每次连接时都会有延迟,现在想象一下如果总是连接和关闭数据库连接会发生什么情况数据库连接必须仅在需要时打开,并在完成所有必要的操作后关闭。代码示例: Java 7之前的版本: Connection con = null; try { con = ... //retrieve the database connection //do your w

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


数据库连接应该一直保持打开状态,还是在需要时打开和关闭?

每次连接时都会有延迟,现在想象一下如果总是连接和关闭数据库连接会发生什么情况

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

  • 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
    
但由于手动打开数据库连接的成本太高,因此强烈建议使用以Java表示的接口。这将为您处理物理数据库连接,当您关闭它时(即调用
连接#close
),物理数据库连接将仅处于睡眠模式,并且仍然处于打开状态

相关问答:

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


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

因此,只有在需要时才打开连接,并在流程完成后关闭连接,这始终是一种更好的做法

始终尝试将您的连接关闭逻辑放入finally块中,这将确保您的连接将关闭,即使应用程序中发生任何异常

finally
{
connection.close()
}

这取决于你的需要

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


若您只需要使用此连接几次,则可能无法使其保持打开状态,但若要访问数据库,则会有延迟。因此,我建议您制作一个计时器,使连接保持打开状态一段时间(连接超时)。

实际上,这一切都取决于您如何编写应用程序!这是一门艺术,但不幸的是,每个人都会像微软的教程一样,为一个好的实践而接受教程

如果您知道您正在编写的代码,那么在应用程序的生命周期中,您将保持连接打开。这很简单,不是因为你必须在早上上班,我们每天都要为你建立一条特殊的路线!你像每个人一样走那条路,或者走2到4条路!你根据交通量进行判断,根据需要建立2条、4条或6条路线。如果这4条或6条路线有车辆,请稍候


快乐编码。

每次执行查询后,您都需要关闭连接。有时您需要同时执行多个查询,因为查询彼此挂起。例如“先插入任务,然后将其分配给员工”。此时,在同一事务上执行查询并提交,如果出现一些错误,则回滚。默认情况下,JDBC中禁用自动提交

使用连接池。如果您正在开发Web应用程序,请使用App Server连接池。App Server将为您的每个应用程序使用相同的池,以便您可以从一点控制连接计数。强烈建议使用Apache Tomcat连接池

作为附加信息: 连接、语句和结果集

1.如果关闭连接,则不需要close语句或resultset。它们都将自动关闭

2.如果您关闭语句,它也将关闭ResultSet

3.如果您使用以下资源进行尝试:

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

它将自动关闭连接。因为“尝试使用资源”需要可自动关闭的对象,并且连接是可自动关闭的。您可以查看有关“尝试使用资源”的详细信息。

注意:您必须始终连接并关闭。是的,但如果您有20多个数据库交互,则需要等待,直到不再需要为止,这通常是在您关闭应用程序时发生的。这就是为什么您应该使用数据库连接池,而不是手动创建数据库连接,并尝试将其保持打开状态。如果该连接为单个用户打开了一段时间,请想象其他用户如何访问该应用程序。@Luigimendoza Yes,使用连接池是一个很好的替代方法,可以让连接始终保持完全打开状态。关于数据库连接和每个人每天上班的交通,这是一个很好的类比。