为啥我们需要 JDBC 的连接池? [关闭]

Posted

技术标签:

【中文标题】为啥我们需要 JDBC 的连接池? [关闭]【英文标题】:Why we need a connection pooling for JDBC? [closed]为什么我们需要 JDBC 的连接池? [关闭] 【发布时间】:2013-04-12 03:56:23 【问题描述】:

使用像DBCP 或c3p0 这样的JDBC 连接池工具有什么好处?

如果 小型 CRUD 应用程序有 一个 用户,我们可以只创建 一个 连接会话作为 单身 ?

PS:我正在构建一个小型的javafx 应用程序,其后端带有小型h2 数据库(5 表)。

【问题讨论】:

【参考方案1】:

来自 Jon Skeet 对 What is the benefit of Connection and Statement Pooling? 的回答:

创建到数据库服务器的网络连接是(相对) 昂贵的。同样要求服务器准备一条 SQL 语句是 (相对)昂贵。

使用连接/语句池,您可以重用现有的 连接/准备好的语句,避免了启动一个 连接、解析SQL等

以下内容,来自Kent Boogaart's answer:

我不熟悉c3p0,但是池连接的好处 和声明包括:

    性能。连接到数据库既昂贵又缓慢。池连接可以保持物理连接到数据库, 并在需要数据库访问的各种组件之间共享。 这样,连接费用一次性支付并在所有费用中摊销 消费组件。

    诊断。如果您有一个负责连接数据库的子系统,那么诊断和分析数据库变得更加容易 连接使用情况。

    可维护性。同样,如果您有一个负责分发数据库连接的子系统,您的代码将更易于维护 而不是每个组件都连接到数据库本身。

【讨论】:

从这里抄袭:***.com/a/457305/19679 和这里:***.com/a/457303/19679。你真的很喜欢听 Jon Skeet 的话,不是吗?【参考方案2】:

创建连接的成本很高,而且为每个事务创建一个可能只需要几毫秒的新连接是没有意义的。在池中管理数据库连接意味着应用程序可以以一种避免连接创建时间的方式执行数据库事务(连接仍然需要创建,但它们都是在启动时创建的)。不利的一面是,如果所有连接都在使用中,并且需要另一个连接,则请求线程将不得不等待,直到一个连接返回到池中。

【讨论】:

以上是关于为啥我们需要 JDBC 的连接池? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

JDBC(连接池) -- 02(II)

为啥在部署时验证 Java JDBC 连接池

JDBC数据库连接池DbUtils框架分页

MySQL 和 JDBC 连接池:未关闭的语句

哪个更好:JDBC 连接池,还是使用 SIngleton 类进行 JDBC 连接?

如今,使用 JDBC 的连接池是不是仍在提高性能?