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

Ubuntu虚拟机Python连接IBM DVM报错:驱动类未找到,求正确类名

Python连接IBM DVM驱动类错误排查与修复

问题描述

我在Linux Ubuntu虚拟机上尝试用Python访问IBM DVM(Data Virtualization Manager),已完成以下配置:

  • 安装Java环境:执行java -version显示为openjdk version "1.8.0_362"
  • 通过pip install JayDeBeApi成功安装JayDeBeAPI(包含JPype1-1.4.1、JayDeBeApi-1.2.3等依赖)
  • 从IBM官网下载DVM-JDBC3.1驱动并解压至/opt/dvm-jdbc-3.1.202303130554
  • 设置CLASSPATH为/opt/dv-jdbc-3.1.202303130554:/opt/dv-jdbc-3.1.202303130554/dv-jdbc-3.1.202303130554.jar:

运行以下Python代码尝试连接:

import jpype
import jaydebeapi

dvm_driver_path = "/opt/dv-jdbc-3.1.202303130554/dv-jdbc-3.1.202303130554.jar"

jpype.addClassPath('/opt/dv-jdbc-3.1.202303130554/dv-jdbc-3.1.202303130554.jar')
jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path=%s" % ('/opt/dv-jdbc-3.1.202303130554/dv-jdbc-3.1.202303130554.jar'))

conn = jaydebeapi.connect('com.rs.jdbc.dv.DvDriver.class',
'jdbc:dv://###:##/###',
{'user': '#####', 'password': '####'},
'/opt/dv-jdbc-3.1.202303130554/dv-jdbc-3.1.202303130554.jar')

if (conn):
print('Connected')
else:
print('Failed to connect')

执行后出现错误:

python3 dvm-jdbc.py
Traceback (most recent call last):
File "/opt/dv-jdbc-3.1.202303130554/dvm-jdbc.py", line 26, in 
conn = jaydebeapi.connect('com.rs.jdbc.dv.DvDriver.class',
File "/home/sanika/.local/lib/python3.10/site-packages/jaydebeapi/__init__.py", line 412, in connect
jconn = _jdbc_connect(jclassname, url, driver_args, jars, libs)
File "/home/sanika/.local/lib/python3.10/site-packages/jaydebeapi/__init__.py", line 221, in _jdbc_connect_jpype
jpype.JClass(jclassname)
File "/home/sanika/.local/lib/python3.10/site-packages/jpype/_jclass.py", line 99, in __new__
return _jpype._getClass(jc)
TypeError: Class com.rs.jdbc.dv.DvDriver.class is not found

疑问:使用的驱动类是否错误?如果是,正确的驱动类名称是什么?

解决方案

你使用的驱动类名称确实错误,正确的驱动类名是com.rs.jdbc.dv.DvDriver——不需要添加后缀.class。Java中引用类时只需要全限定类名,.class是编译后的文件后缀,不属于类名的一部分。

同时,代码可以简化优化:

  1. 无需重复配置classpath:jaydebeapi.connect的第四个参数会自动处理驱动jar包路径,不需要同时调用jpype.addClassPath和启动JVM时指定-Djava.class.path。
  2. 增加JVM关闭逻辑:用try...finally确保JVM在程序结束后正常关闭,避免资源泄漏。

修正后的代码:

import jpype
import jaydebeapi

dvm_driver_path = "/opt/dv-jdbc-3.1.202303130554/dv-jdbc-3.1.202303130554.jar"

try:
    # 启动JVM并建立连接,jaydebeapi自动处理驱动路径
    conn = jaydebeapi.connect(
        'com.rs.jdbc.dv.DvDriver',
        'jdbc:dv://###:##/###',
        {'user': '#####', 'password': '####'},
        dvm_driver_path
    )
    if conn:
        print('Connected')
        # 可在此添加数据查询、操作逻辑
        conn.close()
    else:
        print('Failed to connect')
finally:
    # 确保JVM正常关闭
    if jpype.isJVMStarted():
        jpype.shutdownJVM()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 02:25:02