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
相关产品推荐
相关产品推荐

