gpt4 book ai didi

sql-server - Tomcat 6 中的 SQL Server 连接管理

转载 作者:行者123 更新时间:2023-11-28 22:39:09 26 4
gpt4 key购买 nike

我们在使用 JDBC 连接到 SQL Server 数据库的 Tomcat 6 中运行的 Java Web 应用程序遇到问题。

在几次请求后,应用服务器挂掉了,我们在日志文件中发现了与数据库连接失败相关的异常。

我们现在不使用任何连接池,我们使用标准的 JDBC/ODBC/ADO 驱动程序桥连接到 SQL Server。

我们是否应该考虑使用连接池来消除这个问题?

此外,我们是否应该将驱动程序更改为类似 jTDS 的驱动程序?

最佳答案

如果您没有关闭 JDBC 连接,这是正确的行为。

当您使用完每个 JDBC 资源以及通过它获得的其他 JDBC 资源时,您必须调用每个 JDBC 资源的 close() 方法。

这适用于 Connection、Statement/PreparedStatement/CallableStatement、ResultSet 等。

如果您不这样做,对于初学者来说,您将在 SQL 服务器上囤积潜在的巨大且可能非常有限的资源。

最终,连接将不会被授予,获取执行和返回结果的查询将失败或挂起。

如果您没有将 autoCommit 属性设置为 true,并且在每个事务结束时未能执行 commit() 或 rollback(),您还可能会注意到您的 INSERT/UPDATE/DELETE 语句挂起。

我所看到的是,如果您将上面提到的严格性应用到您的 JDBC 客户端代码中,那么 JDBC 和您的 SQL 服务器将会非常顺利地工作。如果你写的是垃圾,那么一切都会像垃圾一样。

许多人编写 JDBC 调用时期望“其他东西”通过调用 close() 来释放每个东西,因为这很无聊,而且应用程序和服务器不会在他们遗漏它时立即失败。

没错,但那些程序员编写的程序是在他们的服务器上播放“墙上的 99 瓶啤酒”。

资源将耗尽并且请求往往会导致以下一种或多种情况发生:连接请求立即失败、SQL 语句立即失败或永远挂起或直到某个可怕的冗长事务超时计时器到期,等等。

因此,解决这些类型的 SQL 问题的最快方法不是责怪 SQL 服务器、应用程序服务器、Web 容器、JDBC 驱动程序,或者令人失望的 Java 垃圾收集器中缺乏人工智能。

解决它们的最快方法是用 Nerf 飞镖射杀在您的应用程序中编写与 SQL 服务器通信的 JDBC 调用的人。当他说,“你这样做是为了什么……?!”只需指向这篇文章并告诉他阅读它。 (切记不要对着眼睛、手里的东西、可能有危险/易碎的东西等开枪)

至于连接池解决你的问题......不。抱歉,连接池只是通过将预先分配的、可能是回收的连接传递给应用程序来加快调用以获取应用程序中的连接。

牙仙把钱放在你的枕头下,复活节兔子把鸡蛋和糖果放在你的灌木丛下,圣诞老人把礼物放在你的树下。但是,抱歉打破你的幻想 - SQL 服务器和 JDBC 驱动程序不会关闭所有内容,因为你“忘记”关闭你自己分配的所有内容。

关于sql-server - Tomcat 6 中的 SQL Server 连接管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/425809/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com