Derby ij工具未退出时Java程序无法连接数据库的原因排查
Derby数据库连接冲突问题解析
问题场景
在Windows CMD中通过java org.apache.derby.tools.ij连接UserDataDB数据库,执行断开连接操作后ij工具仍保持打开状态,此时Java程序无法连接该数据库,必须退出ij工具才能成功连接。
原因分析
Derby默认以嵌入式模式运行,该模式下数据库文件会被当前持有连接的进程独占锁定。即便在ij中执行了断开连接的命令,只要ij所在的JVM进程未终止,Derby数据库引擎实例就不会完全关闭,仍会持有数据库文件的锁,导致其他JVM进程(你的Java程序)无法获取访问权限,进而触发XJ040错误。
错误信息翻译
XJ040.C : [0] C:\Program Files\Java\jdk-22\db\UserDataDB, [1] jdk.internal.loader.ClassLoaders$AppClassLoader@4fca772d
中文翻译:XJ040.C:[0] 目标数据库路径为 C:\Program Files\Java\jdk-22\db\UserDataDB,[1] 当前持有数据库锁的类加载器实例为 jdk.internal.loader.ClassLoaders$AppClassLoader@4fca772d
代码示例
try{ Connection con = DriverManager.getConnection("jdbc:derby:C:\\Program Files\\Java\\jdk-22\\db\\UserDataDB; create=true;"); System.out.println("Good connections. "); con.close(); }catch (Exception e){ System.out.println(e.getMessage()); }
解决方法
- 在ij工具中执行
shutdown true;命令,彻底关闭Derby数据库引擎,释放文件锁,无需退出ij即可让其他程序连接数据库。 - 直接退出ij工具,终止其JVM进程,自动释放数据库文件锁。
- 切换为Derby网络服务器模式:启动Derby网络服务后,多个进程可通过JDBC客户端连接共享数据库,避免独占锁定问题。
内容的提问来源于stack exchange,提问作者Schuyler Bradshaw
相关产品推荐
相关产品推荐

