【问题标题】:Python: HSQL DB remains open after closing? (jaydebeapi)Python:HSQL DB 关闭后仍保持打开状态? (杰德比皮)
【发布时间】:2021-04-18 22:41:49
【问题描述】:

任务 我正在编写一个 Python 脚本,它在 HSQL-DB 中进行一些更改,然后通过命令行重新执行一个 java-programm,该命令行与 DB 中的数据一起工作。我正在使用 jaydebeapi 来更改 Python 中的数据。

问题 java 程序失败,因为它无法获得数据库锁。尽管我已经关闭了 documentation 中所述的光标和连接。

java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@2b59e8f5[file =H:\Benutzer\Markus\Dokumente\Uni\IG_Ue\JAG3D_projects\project1\jag3d_project.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2021-01-13 21:03:33 heartbeat - read: -8526 ms.

最小工作示例

import jaydebeapi
import os

JAG3DAppCMD_path = r"custom_jag3d\JAG3DAppCMD.jar"
db_cmd_path = r"JAG3D_projects\project1\jag3d_project"

# Execute java program BEFORE DB was connected - WORKS
os.system(r'java -jar ' + JAG3DAppCMD_path + ' ' + db_cmd_path + ' TRUE')

# establish DB connection
UserName = "SA"
Password = ""
Java_Class = "org.hsqldb.jdbcDriver"
HSQL_Driver_Path = r"hsqldb-2.5.1\hsqldb\lib\hsqldb.jar"
Database = r"jdbc:hsqldb:file:JAG3D_projects\project1\jag3d_project"

conn = jaydebeapi.connect(Java_Class, Database, [UserName, Password], jars=HSQL_Driver_Path)
curs = conn.cursor()

# close DB
curs.close()
conn.close()

# Execute java program AFTER DB was connected - DOES NOT WORK
os.system(r'java -jar ' + JAG3DAppCMD_path + ' ' + db_cmd_path + ' TRUE')

其他信息 建立数据库连接后,将创建一个 .log 和 .lck 文件以及一个 .tmp 文件夹。关闭连接后,这些项目仍然存在。当我关闭 python 控制台时,它们被删除。我试图在我的 python 脚本中手动删除 .lck 文件,但我不能,因为它仍然被不同的进程使用:

PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'JAG3D_projects\\project1\\jag3d_project.lck'

感谢任何帮助!

【问题讨论】:

    标签: python database hsqldb jaydebeapi


    【解决方案1】:

    您的观察表明,通过 Python 的第一个连接关闭后,数据库仍然处于打开状态。

    数据库是一种资源,一旦建立第一个连接,它就会保持打开状态,并且不会自动关闭(默认情况下)。 .lck 文件阻止任何其他进程访问数据库。

    您只需在第一组更改结束时执行 SQL 语句 SHUTDOWN。这将以干净的方式关闭数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-21
      • 2012-01-30
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多