使用select语句锁定获取[SQLITE_BUSY]数据库文件

如果我对自己的Web应用程序运行多个线程,则会得到:

java.sql.SQLException: [SQLITE_BUSY]  The database file is locked (database is locked)

at org.sqlite.DB.newSQLException(DB.java:383)

at org.sqlite.DB.newSQLException(DB.java:387)

at org.sqlite.DB.execute(DB.java:339)

at org.sqlite.PrepStmt.executeQuery(PrepStmt.java:75)

at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)

我确实知道只有一个线程可以写入sqlite数据库,但是我只是从数据库中读取。那么,为什么我会收到此错误消息?

顺便说一句:我的连接池如下所示:

<bean class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close" id="dataSource">

<property name="driverClassName" value="${database.driverClassName}" />

<property name="url" value="${database.url}" />

<property name="username" value="${database.username}" />

<property name="password" value="${database.password}" />

<property name="initialSize" value="1" />

<property name="maxActive" value="2" />

<property name="maxIdle" value="1" />

<property name="poolPreparedStatements" value="true" />

</bean>

设置为:Java 1.6,Tomcat 7.0.34,Spring 3.2,Hibernate 3.6.9和sqlite3 3.7.2

问候罗杰

回答:

经过一番谷歌搜索后,我发现在连接到SQLite时使用多个连接是一种不好的做法。看到

http://touchlabblog.tumblr.com/post/24474398246/android-sqlite-

locking

将您的poolsize maxactive设置为1并尝试。

以上是 使用select语句锁定获取[SQLITE_BUSY]数据库文件 的全部内容, 来源链接: utcz.com/qa/400331.html

回到顶部