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

如何用Python连接Informix数据库?执行查询遇NoClassDefFoundError错误

问题

使用Python通过jaydebeapi连接Informix数据库,执行查询语句cursor.execute("SELECT * FROM product")并获取、遍历结果时,抛出错误:

java.lang.java.lang.NoClassDefFoundError: java.lang.NoClassDefFoundError: org/bson/BSONObject

移除查询及结果遍历代码段后,程序可正常运行。完整代码如下:

import jaydebeapi

jdbc_url = "jdbc:informix-sqli://xxx:3xxx/xxxxx:INFORMIXSERVER=xxxxx;user=xxxx;password=xxxx"
username = "xxxx"
password = "xxxx"

jdbc_driver = "D:\\jdbc-4.50.4.1.jar"

connection = jaydebeapi.connect(
    "com.informix.jdbc.IfxDriver", 
    jdbc_url,             
    [username, password],                           
    jdbc_driver                   
)

cursor = connection.cursor()


cursor.execute("SELECT * FROM  product") 
results = cursor.fetchone()

for row in results:
    print(row)

cursor.close()
connection.close()
解决方案
  • 错误根源是Informix JDBC驱动在处理特定数据类型(如JSON/BSON相关字段)时,依赖BSON类库,但当前环境未包含该依赖。
  • 下载兼容版本的MongoDB BSON驱动包(如bson-xxx.jar),将其路径添加到jaydebeapi.connect的驱动参数中,示例:
    jdbc_driver = ["D:\\jdbc-4.50.4.1.jar", "D:\\bson-4.6.0.jar"]
    
  • 若无需查询JSON类型字段,可修改SQL语句,仅指定需要的字段,避免触发驱动加载BSON类,示例:
    SELECT id, name, price FROM product
    

内容的提问来源于stack exchange,提问作者Juan Felipe Urrego Bran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:42:45