3

关闭或缓存 sql 连接的最佳做法是什么?
我看到事情说总是在 finally 块中关闭它。尽管我也看到有关缓存它们以备将来使用的事情。

为每个任务打开新连接的成本是多少?

我刚开始开发其他人编写的 java 数据仓库应用程序。(而且我没有数据库经验)它是一个单线程应用程序,将文件加载到数据库中,并进行一些聚合和分析。我们遇到了一些死锁问题,我认为这在单线程应用程序中不应该是问题。我看到异常被吞没并且没有记录在处理数据库连接的整个类中,所以我希望向那些添加日志记录应该提供一些见解。

但我希望同时获得一些关于处理数据库连接的最佳实践的指导。

4

1 回答 1

2

无论您是否使用连接池,任何数据库代码都应遵循以下形式:

try (
  Connection connection = dataSource.getConnection();
  PreparedStatement preparedStatement = ...
)
{
  ...
}

dataSource可能是一个池或一个简单的连接工厂,对于您的代码来说这无关紧要,它只是它从哪里获取connection的。

这就是说,我会使用 Spring 的JdbcTemplate类,它与上面的代码所做的差不多。

关于“为每个任务打开新连接的成本是多少?”这个问题。- 至少与从游泳池中抓一个相比,答案是非常的。您还必须考虑如果运行大量任务会发生什么 - 大多数数据库将配置为限制连接数。

最重要的是,除了最简单的应用程序之外,您应该使用像c3po这样的连接池并根据您的需要调整大小

关于您的死锁,这很可能发生在数据库中,根据数据库的配置方式,在更新数据时可以生成各种锁。

于 2013-11-07T16:50:45.200 回答