You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:02:32