Java.sql.SQLException: 数据库锁定。

10
我们的代码中使用了sqlite056.jar。在批量插入数据库时,我们在提交时会遇到异常。
<object of Connection>.commit();
<object of Connection>.setAutoCommit(true);

异常

java.sql.SQLException: database locked
5个回答

9

每次查询后都需要关闭连接。如果仍有任何连接持续存在,则会出现相同的错误。我在Java桌面应用程序上也遇到了同样的问题,现在已解决。


7

读取SQLite数据库会将锁定状态设置为共享。多个读者可以同时活动。

写入SQLite数据库会将锁定状态设置为独占。此时,没有其他进程可以活动。

您可以在http://www.sqlite.org/lockingv3.html上找到详细的解释。


当我使用appletviewer运行一个访问sqlite数据库的小程序时,遇到了相同的错误。但只有在64位jvm下运行时才会出现问题。切换到32位jvm就可以正常工作(Windows)。可能64位驱动程序没有编译进jar包中。 - dgorissen

2

似乎有多个进程试图修改数据库。在任何给定时间,您只能打开一个连接。更多关于问题的背景可能会帮助我们为您提供更具体的答案。


我们能否使用同一个数据库连接对象同时操作多个数据库表呢?假设我在使用同一个数据库连接对象时,在表1中插入了数据,同时也在表2中插入了数据。 - rajkumari
或者是由于 obj Connection.commit() 行导致的数据库锁定异常发生。 - rajkumari

0
在我的情况下,我忘记在我的UPDATE查询中添加WHERE子句,这导致了“数据库锁定”错误。
仔细检查您的查询。
编辑:我忘记指出我使用了一种UPDATE查询类型,其中我正在更改多个属性:
UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;

1
一个非常古老的问题,但感谢您尝试回答它。在这种特定情况下,您不知道所讨论的SQL语句是什么样子的,因此建议查询是缺少WHEREUPDATE语句看起来像是猜测。在这种情况下更合适的做法是询问(在评论中)SQL查询的样子 - 暗示原因可能类似于缺少WHERE子句。 - ishmaelMakitla
我已经在我的帖子中添加了编辑。我认为问题有多长并不重要,人们会像我一样通过谷歌搜索这个问题。问候! - М.Б.
好的观点。关于SQL语句,我的意思是问题本身没有包含SQL语句,所以你不会知道它的样子(除非询问)。但是回答旧问题确实是个好观点。 - ishmaelMakitla

0

关闭数据库浏览器(对我有效),或任何其他访问数据库的程序


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接