【发布时间】: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