我正在开发一个使用 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>
在每个线程中,我都有一个单独的 JdbcDaoSupport 实例,用于执行对数据库的插入:
getJdbcTemplate().update(
"insert into counts values(15)"
);
执行数据库更新的函数是事务性的(我已经尝试了所有隔离级别,在每种情况下我都会得到相同的错误)。
当使用其他数据库(MySql)时,相同的代码可以正常工作。
我该如何解决这个问题(不在我的代码中添加“手动”同步)?
我还没有尝试过,但我建议,鉴于 SQLite 一次仅支持一个连接,您应该将数据源配置为仅创建一个连接。
我认为这会像下面这样......
<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="1" />
<property name="maxActive" value="1" />
<property name="maxIdle" value="1" />
<property name="poolPreparedStatements" value="true" />
</bean>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)