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

OpenEdge 12.2数据库JDBC连接触发触发器报错的解决咨询

OpenEdge 12.2.0 JDBC触发触发器时Java动态库加载失败问题解决

我使用最新版OpenEdge JDBC驱动连接OpenEdge 12.2.0数据库,数据库运行在Eclipse Temurin JDK 11.0.14.101环境,而JDBC连接的应用程序使用Eclipse Temurin JDK 8.0.322.6,二者部署在同一台Windows 10电脑上。能正常创建触发器,但通过JDBC更新行触发触发器时,抛出以下异常:

java.sql.SQLException: [DataDirect][OpenEdge JDBC Driver][OpenEdge] Failed during dynamic load of Java dynamic library. Reason = [126]The specified module could not be found.
[jvm].

我查阅了两篇Progress社区的旧文章,在启动数据库前执行了sql_env脚本,按文章建议设置了CLASSPATH和PATH环境变量,试过%DLC%和绝对路径,但问题依旧。怀疑文章过时,因为它们未覆盖12.x版本,其中一篇仅针对Windows NT/2000。


解决方案

1. 优先配置数据库进程的JDK 11路径

OpenEdge 12.2.0运行依赖JDK 11,需让数据库启动进程的PATH优先加载JDK 11的动态库:

  • 打开系统环境变量设置,将JDK 11的bin目录(如C:\eclipse-temurin-11.0.14.101\bin)移到PATH最顶部
  • 重启OpenEdge数据库服务,确保新环境变量生效

2. 在proenv环境中启动数据库

使用OpenEdge自带的proenv命令行工具,强制指定JDK 11环境后启动数据库:

# 打开proenv后执行
set JAVA_HOME=C:\eclipse-temurin-11.0.14.101
proserve 你的数据库名称.db

执行java -version验证输出为JDK 11版本,确保数据库进程使用正确的Java环境。

3. 修正CLASSPATH配置

确保CLASSPATH包含OpenEdge核心Java类库,正确配置示例:

set CLASSPATH=%DLC%\java\openedge.jar;%DLC%\java\progress.jar;你的触发器类所在目录或JAR包路径

4. 隔离应用与数据库的JDK环境

由于应用用JDK 8、数据库用JDK 11,需避免环境变量冲突:

  • 应用程序启动脚本中明确指定自身的JAVA_HOME为JDK 8路径,不依赖系统全局配置
  • 数据库仅在proenv或单独的启动脚本中配置JDK 11环境,与应用环境完全隔离

5. 检查动态库完整性

使用Windows的dumpbin工具或Dependency Walker,检查JDK 11的jvm.dll(通常在JDK11路径\jre\bin\server目录)是否存在,且该目录已加入数据库进程的PATH。


内容的提问来源于stack exchange,提问作者Evan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:25:17