简介:本资源是IBM Informix数据库Windows平台开发必备工具包——Informix Client SDK 4.10 for Windows,面向C/C++、Java、Python等多语言开发者,解决Windows 32位环境下与Informix数据库高效集成、连接配置及应用部署问题。压缩包共13个文件,含6个说明文档(txt)、3个核心运行库(dll)、1个关键配置文件(csdk.properties)、1份PDF安装指南、1个HTML版发行说明及1个安装程序(exe),全面覆盖SDK部署、JDBC驱动(JAB)、嵌入式SQL、OLE DB与.NET接口等核心能力。资源大小为176.72MB,结构精炼,文档齐全,便于快速定位API用法、连接参数配置与OAT在线应用传输服务启用方法。目前已有619人学习下载,适合从事Informix数据库应用开发、系统迁移或企业级Java/C++中间件集成的中高级工程师,可直接用于开发环境搭建、连接调试与生产级配置实践。
1. Informix Client SDK 4.10 For Windows:不是驱动包,而是你连接老系统时少写的那行setenv和多踩的三个 DLL 加载陷阱
你在维护一套跑在 IBM Informix 11.70 或 12.10 上的金融清算后台,数据库还在用onspaces管理 chunk,应用服务器是 WebLogic 12c,但新写的 Python 数据同步脚本死活连不上——报错SQL0290N 无法加载 SQLAPI 库,或者更玄学的ISAM error -120;又或者 Java 项目里com.informix.jdbc.IfxDriver类加载成功,一执行SELECT FIRST 1 * FROM sysmaster:sysdatabases就抛SQLException: Cannot establish connection。这不是网络问题,也不是密码错了,是你缺了 Informix Client SDK 4.10 For Windows 这个“胶水层”:它不光提供 JDBC/ODBC 驱动,还打包了iclit09b.dll、ifxjdbc.dll、sqlapi.dll三组运行时依赖,以及SETENV.BAT里那一套被现代 IDE 自动忽略的环境变量链。它专治那些“明明驱动 jar 放对了,却连不上老 Informix 实例”的血泪现场,适合正在对接银行核心、电信计费、能源 SCADA 等存量 Informix 系统的后端工程师、DBA 和集成测试人员。别被名字里的 “SDK” 欺骗——它没有 API 文档生成器,也不带 GUI 工程器,它的价值全在bin/目录下那 17 个.dll文件和etc/sqlhosts的模板里。
2. 安装与环境初始化:为什么SETENV.BAT必须手动执行,而不是双击安装向导
Informix Client SDK 4.10 For Windows 的安装包(.exe)表面是个图形化向导,实则是个“半托管”部署:它会解压文件、注册 ODBC DSN,但绝不会自动写入系统 PATH、INFORMIXDIR、INFORMIXSERVER。这是设计使然,不是 bug——因为 Informix 允许多实例共存(如ol_informix1170和ol_informix1210),每个实例需要独立的INFORMIXDIR指向其$INFORMIXDIR,而 SDK 只负责提供客户端能力,不干涉服务端路径。若跳过手动初始化,你的 Java 进程启动时找不到ifxjdbc.dll,Python 的ibm_db模块加载iclit09b.dll失败,甚至 Navicat 17 连 Informix 时提示Unable to load driver library,全因环境变量链断裂。
2.1 执行SETENV.BAT并验证变量链
安装完成后,进入 SDK 安装目录(默认为C:\Informix\CLI),找到SETENV.BAT。不要双击运行——它会在新 cmd 窗口里临时生效,关掉即失效。必须在你的开发终端中执行:
cd /d "C:\Informix\CLI" call SETENV.BAT提示:
call是关键。直接SETENV.BAT会启动新 shell,当前 shell 环境不变;call则在当前上下文中执行,变量持久到该 cmd 生命周期。
执行后,立即验证三要素:
echo %INFORMIXDIR% echo %INFORMIXSERVER% echo %PATH% | findstr /i "informix"预期输出:
C:\Informix\CLI ol_informix1170 ...;C:\Informix\CLI\bin;C:\Informix\CLI\lib;...INFORMIXDIR必须指向 SDK 根目录(非服务端目录!)INFORMIXSERVER必须与目标 Informix 实例名完全一致(区分大小写,且需与sqlhosts中条目匹配)PATH中必须包含bin和lib子目录——bin放可执行工具(如dbaccess),lib放运行时 DLL(如iclit09b.dll)
2.2 手动补全sqlhosts:比tnsnames.ora更硬核的连接注册表
Informix 不用 TNS,用sqlhosts文件做服务名解析。SDK 安装后,%INFORMIXDIR%\etc\sqlhosts是空文件或仅含注释。你必须手动添加目标实例条目。格式严格:
ol_informix1170 onsoctcp dbserver01 192.168.5.10 30000 # 服务名 协议 主机名/IP 端口- 第一列
ol_informix1170必须与INFORMIXSERVER值完全一致; - 第二列协议:
onsoctcp(TCP/IP)、onipcshm(共享内存,仅限本机)、onsocks(SOCKS 代理,极少用); - 第三列主机名:建议用 IP,避免 DNS 解析失败;若用主机名,确保
C:\Windows\System32\drivers\etc\hosts中有对应解析; - 第四列端口:Informix 默认
onconfig中SERVERNUM对应端口,非PORT_NUM(那是 SQLHOSTS 端口)。
验证方式:在cmd中运行ping dbserver01(若用主机名)+telnet 192.168.5.10 30000(确认端口可达)。失败则sqlhosts条目无效。
2.3 ODBC DSN 注册:Navicat 17 和 Excel Power Query 的命门
SDK 安装向导会弹出 ODBC Data Source Administrator 窗口,让你注册 DSN。必须选“System DSN”,不能选“User DSN”——因为服务进程(如 IIS、WebLogic)以 SYSTEM 或 NETWORK SERVICE 身份运行,看不到 User DSN。
注册步骤:
- 打开
odbcad32.exe(64 位系统需注意:C:\Windows\SysWOW64\odbcad32.exe是 32 位,C:\Windows\System32\odbcad32.exe是 64 位;Java 应用通常用 64 位 DSN,Pythonpyodbc默认用 64 位); - 切换到System DSN页签 → 点击Add→ 选择IBM INFORMIX ODBC DRIVER (64-bit);
- 在配置窗口中:
- Data Source Name:自定义,如
INFIX_PROD_1170; - Database:填目标数据库名(如
sysmaster); - Server:填
sqlhosts中第一列的服务名(ol_informix1170); - Host:留空(由
sqlhosts解析); - Service:留空(同上);
- Protocol:
onsoctcp; - 用户名/密码:填有权限的账号(如
informix)。
- Data Source Name:自定义,如
注意:此处不填 Host 和 Service是关键。Informix ODBC 驱动会主动读取
sqlhosts,若此处填了 IP/端口,反而绕过sqlhosts,导致INFORMIXSERVER变量失效。
注册后,用Test Connection按钮验证。失败常见原因:sqlhosts条目错误、防火墙拦截、INFORMIXSERVER与 DSN 中 Server 不一致。
3. JDBC 集成实战:从 Maven 依赖到IfxDataSource的 5 个参数陷阱
Informix JDBC 驱动(ifxjdbc.jar)已随 SDK 安装到%INFORMIXDIR%\java\ifxjdbc.jar。它不是标准 JDBC 4.0 驱动,不支持ServiceLoader自动发现,必须显式加载。Spring Boot 项目常因忽略这一点而报No suitable driver found。
3.1 Maven 依赖与 Classpath 显式声明
ifxjdbc.jar不能通过 Maven Central 获取(IBM 未发布),必须本地安装或从 SDK 目录引用:
<dependency> <groupId>com.ibm.informix</groupId> <artifactId>ifxjdbc</artifactId> <version>4.10.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/ifxjdbc.jar</systemPath> </dependency>注意:
<scope>system</scope>表示从本地路径加载,Maven 不会下载远程包。<systemPath>必须指向 SDK 安装目录下的java\ifxjdbc.jar(如C:\Informix\CLI\java\ifxjdbc.jar)。
若用 Gradle:
implementation files('C:/Informix/CLI/java/ifxjdbc.jar')3.2IfxDataSource初始化:比DriverManager.getConnection()更稳的连接池入口
推荐使用com.informix.jdbc.IfxDataSource,而非DriverManager。它支持连接池参数,且能捕获 Informix 特有异常(如IfxSQLException):
import com.informix.jdbc.IfxDataSource; IfxDataSource ds = new IfxDataSource(); ds.setServerName("ol_informix1170"); // 必须与 INFORMIXSERVER 一致 ds.setDatabaseName("sysmaster"); ds.setUser("informix"); ds.setPassword("password123"); ds.setPortNumber(30000); // 注意:此处填端口,不是 sqlhosts 中的 service 名 ds.setUrl("jdbc:informix-sqli://192.168.5.10:30000/sysmaster:INFORMIXSERVER=ol_informix1170;user=informix;password=password123"); Connection conn = ds.getConnection();关键参数说明:
setServerName():值必须与INFORMIXSERVER环境变量、sqlhosts第一列完全一致;setPortNumber():填实际监听端口(onstat -g env查PORT_NUM),不是sqlhosts中的 service 名;setUrl():完整 URL 中INFORMIXSERVER=后的值必须与setServerName()一致,否则驱动忽略setServerName();user/password:URL 中的凭据优先级高于setUser()/setPassword(),但建议统一用 setter,避免 URL 泄露密码。
3.3 Spring Boot 配置:application.yml中的 Informix 特有属性
Spring Boot 2.7+ 默认 HikariCP 连接池,需显式指定驱动类:
spring: datasource: url: jdbc:informix-sqli://192.168.5.10:30000/sysmaster:INFORMIXSERVER=ol_informix1170 username: informix password: password123 driver-class-name: com.informix.jdbc.IfxDriver hikari: connection-timeout: 30000 maximum-pool-size: 20 # Informix 特有:禁用自动提交检测(老版本驱动不支持) >onstat -g ses | grep -E "(host|user|program)"预期输出:
201 informix 192.168.5.20 54321 dbaccess 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ......关键字段:
host:客户端 IP(192.168.5.20),确认是你的应用服务器,不是跳板机;user:登录用户名(informix),非root或Administrator;program:程序名(dbaccess、java、python),确认是你的应用进程。
若host显示为127.0.0.1,说明连接被本地代理或端口转发劫持;若program为空,说明连接未通过 Informix 协议栈,可能是 TCP 直连但未握手。
5.2 HikariCP 连接池参数调优:Informix 的maxconn不是最大连接数
Informix 服务端的MAXSERVERS参数限制的是会话数,而非连接数。一个 JDBC 连接池可能复用同一会话(session),也可能创建新会话。HikariCP 的maximum-pool-size应 ≤MAXSERVERS × 0.7(留 30% 给 DBA 工具和后台任务)。
| 参数 | 推荐值 | 说明 |
|---|---|---|
maximum-pool-size | min(20, MAXSERVERS × 0.7) | 避免耗尽服务端会话资源 |
connection-timeout | 30000(30秒) | Informix 默认连接超时为 60 秒,设为一半更安全 |
idle-timeout | 600000(10分钟) | Informix 会话空闲超时由ONCONFIG中SHMSEG和SHMMAX控制,10 分钟足够 |
leak-detection-threshold | 60000(60秒) | 检测连接泄漏,Informix 连接泄漏会导致onstat -g ses中state为dead |
注意:Informix 不支持
validation-query(如SELECT 1),因其sysmaster表结构在不同版本差异大。改用connection-test-query=SELECT FIRST 1 * FROM sysmaster:sysdatabases,并确保用户有sysmaster访问权限。
5.3 日志开关:让ifxjdbc.log成为你排查的后悔药
SDK 提供 JDBC 驱动日志开关,无需修改代码。在 JVM 启动参数中添加:
-Difxjdbc.log=true -Difxjdbc.logfile=C:\temp\ifxjdbc.log日志级别默认为INFO,包含 SQL 执行时间、网络往返、错误堆栈。当出现SQLCODE=-255(通信错误)时,日志会显示Sending packet to host:192.168.5.10 port:30000和Received response length: 0,直接定位到网络层断开。
从那以后我每次部署 Informix 客户端,都强制走一遍SETENV.BAT → echo %INFORMIXSERVER% → telnet IP Port → onstat -g ses四步验证链,哪怕只是本地开发环境——因为 Informix 的“连接成功”和“真正可用”之间,隔着三个 DLL、一个sqlhosts条目和一次服务端会话注册。希望帮到你。
本文还有配套的精品资源,点击获取