如何将IBM_DB与旧版本的DB2一起使用?

问题描述

| 我想使用IBM DB2 ODBC驱动程序将Python连接到DB2版本9.1。 以下是我的将Python连接到DB2的代码。该程序在更高版本的IBM DB2中运行。
import ibm_db

conn = ibm_db.connect(\"DSN=PDB2;DRIVER={IBM DB2 ODBC DRIVER};DATABASE=MDBASIS;PORT=1234;PROTOCOL=TCPIP;UID=username;PWD=password\",\"\",\"\")
stmt = ibm_db.exe_immediate(conn,\"create table egg (ID SMALLINT,NAME VARCHAR(30))\")
stmt = ibm_db.exe_immediate(conn,\"insert into egg (ID,NAME) VALUES(\'1\',\'ok\')\")
state = ibm_db.exe_immediate(\"select * from egg\")
result = ibm_db.fetch_both(state)
while result != False:    
    print \'id = %d and name = %s\' %(result[0],result[1])
    result = ibm_db.fetch_both(state)
stmt = ibm_db.exe_immediate(conn,\"drop table egg\")
我的问题是,没有FixPack的IBM DB2的版本是9.1,并且当我尝试连接到IBM DB2 9.1版本时收到错误消息。
\"[IBM][CLI Driver] CLI0133E Option type out of range. sqlSTATE=HY092 sqlCODE=-99999\"
对此错误的解释写在页面http://programmingzen.com/2008/02/08/essential-guide-to-the-ruby-driver-for-db2/中: \“如果收到此错误,通常意味着您使用的DB2版本太旧。请安装最新的FixPack或最新版本的DB2(当前为9.5)来解决此问题。” 但是我无法安装最新的FixPack或最新版本的DB2,也无法以任何方式修改现有的DB2安装。 题 有什么方法可以连接到DB2版本9.1,而无需修改数据库(可能使用IBM_DB以外的其他方式)?     

解决方法

        我认为问题出在客户机ibm_db驱动程序中。基本上,您可以从所有语言连接到任何较旧的版本。尝试获取另一个db2驱动程序。如果您是我,我将安装db2客户机,该客户机带有sqllib中的几个驱动程序。     ,        您正在使用哪个版本的ibm_db?我能够使用ibm_db 1.0.4连接到DB2 9.1,而不会出现问题。 另外:基于您在连接字符串中指定DSN的事实,我假设您已经在客户端上将数据库分类为PDB2。您可以非常简单地将connect语句更改为:
conn = ibm_db.connect(\'PDB2\',\'username\',\'password\')
唯一需要使用较长格式(在其中指定DATABASE / PORT / HOST / UID / PWD的格式)的情况是,如果使用的是无DSN的连接(即,尚未在本地计算机上对数据库进行分类)。     ,        我猜您的DB2客户端API版本高于DB2服务器本身,请确保您在客户端计算机上使用相同的版本,尝试使用DB2控制中心远程连接和维护数据库,并尝试使用以下命令从python连接:
conn = ibm_db.connect(\"MDBASIS\",\"username\",\"password\")
AFAIK,这将强制包装器使用本机库而不是odbc。     ,        ibm_db(和PyDB2只是python模块,允许您通过python访问DB2 API调用。DB2查询本身是由您的DB2安装执行的...与ibm_db和PyDB2非常不同。 听起来您的DB2安装是问题所在,而不是ibm_db。您可以通过从命令行运行db2并查看是否可以直接在db2命令行界面中执行查询来进行测试。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...