java.sql.Connection关闭/缓存最佳实践

时间:2013-11-07 16:32:52

标签: java sql database-connection

关闭或缓存SQL连接的最佳做法是什么? 我看到的事情总是在最后一块中关闭它。 虽然我也看到有关缓存它们以供将来使用的事情。

为每项任务打开新连接的费用是多少?

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

但我希望在此期间就处理数据库连接的最佳实践提供一些指导。

1 个答案:

答案 0 :(得分:2)

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

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

dataSource可以是一个游泳池,也可以是一个简单的连接工厂,对于您的代码而言,它不应该只是它所在的位置{{1}来自。

这就是说,我使用的是Spring JdbcTemplate类,它的功能与上面的代码完全相同。

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

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

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

相关问题