jfu*_*jfu 10 java sqlite spring
我正在开发一个使用SQLite数据库和spring的应用程序.多线程尝试修改数据库时遇到问题 - 我收到错误:
'数据库文件被锁定'
我配置了一个数据源:
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" lazy-init="true">
<property name="driverClassName" value="org.sqlite.JDBC" />
<property name="url" value="jdbc:sqlite:sample.db" />
<property name="initialSize" value="2" />
<property name="maxActive" value="20" />
<property name="maxIdle" value="5" />
<property name="poolPreparedStatements" value="true" />
</bean>
Run Code Online (Sandbox Code Playgroud)
在每个线程中,我有一个单独的JdbcDaoSupport实例,它执行对数据库的插入:
getJdbcTemplate().update(
"insert into counts values(15)"
);
Run Code Online (Sandbox Code Playgroud)
执行数据库更新的函数是事务性的(我已经尝试了所有隔离级别,在每种情况下我都得到相同的错误).
使用其他数据库(MySql)时,相同的代码工作正常.
如何解决这个问题(在我的代码中没有添加"手动"同步)?
小智 1
希望我能为您提供完美的答案——Berkeley DB和SQL API。去年,Berkeley DB 将其存储引擎与 SQLite 的 SQL 层相结合,提供了一个兼具两全其美的组合产品。SQLite 的普遍性和易用性,以及 Berkeley DB 的并发性、性能、可扩展性和可靠性。
为什么这会解决您的问题?因为 Berkeley DB 完全兼容 SQLite,但实现了不同的、并发性更高的锁管理器。这意味着在 Berkeley DB 中,您可以有多个更新线程同时访问数据库。关于这个主题有几篇有趣的白皮书,由 Mike Owens(《SQLite 权威指南》的作者)撰写:技术和性能评估以及优点和差异。
免责声明:我是 Berkeley DB 的产品经理,所以我有点偏见。然而,您会发现 Berkeley DB SQL API完全解决了您提出的问题——如何在 SQLite 中允许并发读/写操作。
| 归档时间: |
|
| 查看次数: |
15933 次 |
| 最近记录: |