【问题标题】:JAVA SQL Database Locked ErrorJAVA SQL 数据库锁定错误
【发布时间】:2016-03-12 18:25:54
【问题描述】:

我无法运行我的代码。每次我输入用户信息以注册用户时,我都会收到错误消息: java.sql.SQLException: database is locked

【问题讨论】:

  • 这似乎是一大块代码,无法重现您的问题。我建议你先把它缩小到一个关于几个特定行的问题。
  • 非常感谢,删除了一些代码和对问题的一些额外见解
  • 这么多级别的if 嵌套通常是不好的做法,并且会创建难以维护的代码。您可以尝试将这些多个嵌套的ifs 与&&|| 逻辑结合起来吗?重构时你可能会发现你的 bug。

标签: java database locks


【解决方案1】:

该错误很可能是由于您对数据库的其他地方已启动且未完成的操作不完整,例如您尚未提交的事务。您应该关闭所有资源。某个地方没有正确关闭,导致锁一直打开。

【讨论】:

    【解决方案2】:

    您的 query() 方法的结果 - 结果集 - 永远不会关闭。

    知道您使用的是哪个数据库会很有帮助,因为它们有不同的锁处理方式。

    此外,您可能希望为每个数据库操作添加简单的调试点,例如“System.out.println”。这有助于您查看以锁定结尾的数据库语句流。

    一旦发生异常,您应保留异常调用堆栈。这有助于确定您在哪个 SQL 操作上获得了锁定 - 并有助于专注于真正的问题。

    (我可以建议考虑使用 MVC 或轻量级 DDD 来隔离 gui 和 db 代码以保持代码干净,并避免从事件处理线程执行任何数据库操作,因为这最终会在你的 gui,一旦你变得像 spotify 一样大。:))

    【讨论】:

    • 非常感谢您的建议。我添加了replySet的关闭 - 'reply.close(); ',在数据库文件'reply = stmn.executeQuery(sqlString);'的行下但我收到错误消息:2016 年 3 月 13 日下午 7:07:53 account.FXMLController_Register signupBtnClicked SEVERE: null java.sql.SQLException: ResultSet closed
    • 那不正确,您应该在处理完回复后关闭结果集。 IE。在 addContactDetails 和 addSubscriptions 中,确保 rsContact 您从结果集中读出响应后关闭。
    猜你喜欢
    • 2017-02-28
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多