我正在开发一个使用SQLite数据库和spring的应用程序。我有问题,当多个线程试图修改数据库 - 我得到一个错误:spring + 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="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)"
);
执行数据库更新功能是TRANSAC (我尝试过所有的隔离级别,每种情况下我都会得到相同的错误)。
当使用其他数据库(MySql)时,相同的代码工作正常。
我该如何解决这个问题(没有在我的代码中添加'手动'同步)?
您希望您的应用程序如何并发?回想一下,按照设计,SQLite旨在替代fopen()和-not- for MySQL。如果您需要一个设计用于处理并行数据访问的2PL或MVCC的RDBMS,那么您可能希望考虑另一个RDBMS。 MySQL,HSQLDB或Derby都有真正的客户端 - 服务器支持。 – scottb 2013-08-29 21:09:48