Java 中的 SQLite 连接池 - 锁定数据库

Posted

技术标签:

【中文标题】Java 中的 SQLite 连接池 - 锁定数据库【英文标题】:SQLite Connection Pool in Java - Locked Database 【发布时间】:2013-04-04 22:23:00 【问题描述】:

我已经阅读了几个关于多线程环境中 SQLite 的相关帖子,但我找不到明确的说法,所以请原谅我再次提出这个话题。

我需要从多个线程访问应用程序的数据库以执行更新语句。数据库本身可以是 SQLite 或 mysql,这取决于用户的选择。对于 MySQL 处理程序,我使用 tomcat-jdbc 库实现了一个连接池。现在我正在寻找 SQLite 处理程序的最佳方式,因为正常的连接池不应该工作,因为 SQLite 一次只支持一个锁定整个数据库的写入连接。

我应该继续让所有线程一个接一个地使用相同的连接(通过同步连接?)还是应该使用已经存在的仅包含连接的 tomcat 库创建一个连接池?一个连接的连接池是否会过大?

【问题讨论】:

【参考方案1】:

由于是单文件嵌入式数据库,池化几乎没有什么好处。

https://web.archive.org/web/20130410192252/http://sqlite.phxsoftware.com/forums/p/682/3034.aspx

由于原站宕机了,我提供一下总结:

我已经实现了池化并使用池化了 1000 个命令 连接和汇集的速度更接近 单连接速度。

Many non-pooled connections : 2875.0 ms
Many pooled connections     :   93.8 ms
Pooled with reset           :  546.9 ms
One Connection              :   46.9 ms

所以大家一致认为池化并不是很有好处。

http://www.sqlite.org/faq.html#q5

http://www.sqlite.org/threadsafe.html

【讨论】:

第一个链接坏了:(

以上是关于Java 中的 SQLite 连接池 - 锁定数据库的主要内容,如果未能解决你的问题,请参考以下文章

将连接池化有助于sqlite中的线程(以及如何)?

delphi sqlite dbgrideh 锁定数据库

获取sqlite繁忙异常[SQLITE_BUSY]数据库文件被锁定(数据库被锁定)

Azure 数据库上的 Sqlite 已锁定

Qt中的数据库连接池

PyCharm 无法连接到 SQLite:SQLITE_BUSY,(数据库已锁定)