关闭或缓存SQL连接的最佳做法是什么? 我看到的事情总是在最后一块中关闭它。虽然我也看到有关缓存它们以供将来使用的事情。
为每项任务打开新连接的费用是多少?
我刚开始研究别人编程的java数据仓库应用程序。 (我没有数据库经验)它是一个单线程应用程序,可以将文件加载到数据库中,并进行一些聚合和分析。我们遇到了一些死锁问题,我认为这不应该是单线程应用程序中的问题。我看到异常被吞下并且没有记录遍历处理数据库连接的类,所以我希望添加日志记录应该提供一些见解。
但我希望在此期间就处理数据库连接的最佳实践提供一些指导。
无论您是否使用连接池,任何数据库代码都应遵循以下形式:
try (
Connection connection = dataSource.getConnection();
PreparedStatement preparedStatement = ...
)
{
...
}
dataSource
可能是一个游泳池或一个简单的连接工厂,对你的代码它应该无关紧要,它只是它从connection
s得到的地方。
这就是说,我会使用Spring的JdbcTemplate类,它几乎完成了上面的代码。
关于“为每项任务打开新连接的成本有多高?”这个问题。 - 答案是非常的,至少与从池中抓取一个相比。您还必须考虑如果运行大量任务会发生什么 - 大多数数据库将配置为限制连接数。
最重要的是,在最简单的应用程序中,你应该使用像c3po这样的连接池,并根据你的需要调整它的大小
关于您的死锁,这很可能发生在数据库中,根据数据库的配置方式,在更新数据时可以进行各种锁定。