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是编译后的文件后缀,不属于类名的一部分。
同时,代码可以简化优化:
- 无需重复配置classpath:
jaydebeapi.connect的第四个参数会自动处理驱动jar包路径,不需要同时调用jpype.addClassPath和启动JVM时指定-Djava.class.path。 - 增加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
相关产品推荐
相关产品推荐

