当前位置: 首页 > 知识库问答 >
问题:

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

逄嘉熙
2023-03-14

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

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

共有3个答案

尹臻
2023-03-14

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

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

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

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

3.if这样使用try与资源:

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

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

谭宏盛
2023-03-14

这取决于你的需要。

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

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

燕凯旋
2023-03-14

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

>

  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表示为DataSource接口。这将为您处理物理数据库连接,当您关闭它时(即调用Connection#off),物理数据库连接将仅处于SLEEP模式,并且仍然处于打开状态。

相关Q/A:

  • Java连接池

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

  • BoneCP
 类似资料:
  • 问题内容: 我有一个bukkit插件(minecraft),需要连接到数据库。 数据库连接应该一直保持打开状态,还是在需要时打开和关闭? 问题答案: 数据库连接仅在需要时才打开,并在完成所有必要的工作后关闭。代码示例: 在Java 7之前: try { con = … //retrieve the database connection //do your work… } catch (SQLEx

  • 我遇到了这个问题:对于Vaadin7,我已经配置了我的持久性。xml,下面是代码 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“version=“2.0” 当我创建一个新的JPA容器并将其绑定到一个表时,我会在MSSQL活动监视器上看到我的新连接,但如果会话超时或注销,我仍然会在SQL上看到连接。 如果我在应用程序中重新登录,

  • 问题内容: 在许多使用MongoDB的入门示例中,您将看到类似以下的代码: 如果MongoDB与任何其他数据库系统一样,并且操作通常在时间上很昂贵。 所以,我的问题是这样的:只需执行一次,将返回值分配给某个全局模块即可,模块中具有各种功能就可以进行各种与数据库相关的工作(将文档插入集合,更新文档等)。 ),然后由应用程序的其他部分调用它们(从而重新使用该值),然后,在应用程序完成后,才执行。 换句

  • 问题内容: 我目前正在以内存模式测试H2 DB。我建立了一个连接 我想使用dbunit进行一些导入并设置dbUnits db连接 还有我想稍后查询的导入 所以我的问题是,在内存模式下,什么时候可以关闭连接?通常我会做这样的事情 但是在内存中,如果连接关闭,我会丢失数据吗?那么在我结束程序之前,它应该保持打开状态吗? 问题答案: 从H2文档中: 默认情况下,关闭与数据库的最后一个连接会关闭数据库。对

  • 在打开和关闭其他ejb连接时保持和ejb连接打开是常见的还是可以接受的,还是应该在客户端完成连接并为后续任务打开新连接后立即关闭连接? 我目前正在开发一个使用EJB(JBoss AS7.1.1.final)的Swing应用程序。该应用程序打开一个ejb连接(即创建一个SynalContext实例),然后在应用程序保持运行的情况下将该SynalContext用于常见任务。有许多长时间运行的操作,其中

  • 手动设置“自动取消”标志 改用builder.build() notificationmanger取消(id)和/或取消所有 使用NotificationCompat.Builder 对setContentIntent使用常规启动意图,而不是手动调用StartActivity