当前位置: 首页 > 面试题库 >

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

张宣
2023-03-14
问题内容

如果我对自己的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并尝试。



 类似资料:
  • 问题内容: 在MySQL中,我知道可以使用以下命令列出数据库中的表: 但是,我想将这些表名插入另一个表,例如: 有没有一种方法可以使用标准的SELECT语句获取表名,例如: 问题答案: 要获取所有表的名称,请使用: 要从特定数据库获取表的名称,请使用: 现在,要回答原始问题,请使用以下查询: 有关更多详细信息,请参见:http : //dev.mysql.com/doc/refman/5.0/en

  • 是否可以在 SQL SERVER 中的事务中使用 SELECT 语句锁定行?我想锁定该行,以便外部的其他事务无法访问该行。 提交或回滚事务后,应释放该行。这就是我的意思。。。 有人有建议吗?我应该执行 UPDATE 语句来锁定该行吗? 请不要将此问题标记为重复问题。因为,我不是在问UPDATE语句,而是在问SELECT 编辑:我试图“设置事务隔离级别串行化”,但这锁定了太多东西。我的SP很大,它有

  • 问题内容: 在WHERE子句中有使用SELECT语句描述的名称吗?这是好/不好的做法吗? 这会是更好的选择吗? 它远没有那么优雅,但是运行起来比以前的版本要快。我不喜欢它,因为它在GUI中没有非常清晰地显示(并且SQL初学者需要理解它)。我可以将其分为两个独立的查询,但是随后事情变得混乱了…… 注意:我不仅需要日期和分数(例如姓名) 问题答案: 称为相关子查询。它有它的用途。

  • 本文向大家介绍MySQL使用select语句查询指定表中指定列(字段)的数据,包括了MySQL使用select语句查询指定表中指定列(字段)的数据的使用技巧和注意事项,需要的朋友参考一下 本文介绍MySQL数据库中执行select查询语句,查询指定列的数据,即指定字段的数据。 再来回顾一下SQL语句中的select语句的语法: Select 语句的基本语法: Select <列的集合> from

  • 问题内容: 我在我的应用程序中做了一些重复的操作(测试),突然我收到一个奇怪的错误: 我已经重新启动服务器,但是错误仍然存​​在。可能是什么呢? 问题答案: 从Django文档中: SQLite是一个轻量级的数据库,因此不支持高级别的并发性。OperationalError:数据库已锁定错误,表明你的应用程序并发性超过sqlite在默认配置下无法处理的并发性。此错误意味着一个线程或进程在数据库连接

  • 是否可以获取不带注释的方法语句列表,我使用了,这是输出 我只想声明结果是这样的