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

