概述
Informix 是一种应用广泛的关系型数据库服务器,支持多种类型的客户端连接程序,包括 .Net、Java、PHP 等。对于 Java 程序,Informix 支持两种 JDBC 供客户端连接,分别是 IBM Informix JDBC 和 IBM Data Server driver for JDBC and SQL/J。本文对这两种 JDBC 进行详细介绍,并给出 Java 使用两种方法连接 Informix 的方法和实例。
JDK
JDK(Java Development Kit)是用来开发、编译和运行 java 应用程序的软件。在配置 JDBC 之前,应首先安装配置好 JDK。JDK 可以从 Oracle 网站上下载得到。安装完 JDK 后,需设置 JDK 的环境变量。(本文中的示例均是在 Linux 平台下的配置)
清单 1. 设置 JDK 的环境变量
JAVA_HOME=/usr/java/jdk1.7.0_21 JRE_HOME=/usr/java/jdk1.7.0_21/jre PATH=${PATH}:${JAVA_HOME}/bin:${JRE_HOME}/bin CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar:${JRE_HOME}/lib export JAVA_HOME JRE_HOME PATH CLASSPATH
安装完 JDK 并设置完相关环境变量后,可以使用以下程序测试 JDK 是否可用。
清单 2. 测试 Java 程序 hello.java
public class hello { public static void main(String args [ ]) { System.out.println("Hello World!"); System.out.println("JDK installation is successful!"); } }
编译 Java 程序:$ javac hello.java
执行 Java 程序:$ java hello
JDBC
JDBC(Java DataBase Connectivity)是用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,由一组用 Java 语言 编写的类和接口组成。图 1 为 Java 程序使用 JDBC 连接数据库的示意图。
图 1. Java 程序使用 JDBC 连接数据库示意图
Informix 支持两种 JDBC,分别是 IBM Informix JDBC Driver 和 IBM Data Server driver for JDBC and SQL/J。
IBM Informix JDBC Driver 是 Informix 软件内置的 JDBC 驱动,支持 SQLI 通信协议。IBM Informix JDBC Driver 支持所有的 Informix 数据类型。IBM Informix JDBC Driver 符合 JavaSoft 的 JDBC 规范。
IBM Data Server driver for JDBC and SQL/J 是 IBM 通用的 JDBC 驱动,可用于连接 DB2 和 Informix 数据库,符合 Sun Microsystems 的 JDBC3.0 和 JDBC4.0 规范。IBM Data Server driver for JDBC and SQL/J 支持 DRDA(Distributed Relational Database Architecture)协议。(DRDA 协议是协调在不同平台上的应用程序和数据库系统通信的一套协议,基于 Open Group 的数据库互操作标准。)
IBM Data Server driver for JDBC and SQL/J 连接 Informix 具有如下限制:
- 只支持 Informix 11 或更高版本
- 不支持以下 Informix 数据类型
- Complex types: ROW、SET、MULTISET、LIST
- Opaque types
- Interval type
- Boolean:Boolean 类型被当成 smallint 类型
在 Java 程序中,创建和 Informix 数据库的连接需要使用 DriverManager.getConnection() 方法,该方法中的 URL 参数为一个数据库的连接字符串,指定数据库连接机制、数据库实例名、数据库等信息。
下面介绍 Java 程序在使用这两种不同的 JDBC 连接数据库的配置方法。
IBM Informix JDBC Driver
安装配置 JDBC
IBM Informix JDBC Driver 安装软件集成在 Informix 软件安装包,安装 Informix 时选择 Typical 选项包含该驱动,JDBC 的安装路径为:${INFORMIXDIR}/jdbc。单独的 Informix JDBC 也可以从 IBM 网站下载 (下载链接见参考资料),当前最新的版本为 4.10。
安装完 IBM Informix JDBC Driver 后,需要将文件 ifxjdbc.jar 添加到环境变量 CLASSPATH 中。
清单 3. 设置 IBM Informix JDBC Driver 环境变量
CLASSPATH=${CLASSPATH}:${INFORMIXDIR}/jdbc/lib/ifxjdbc.jar export CLASSPATH
设置 JDBC 连接字符串
在 Java 程序中使用 JDBC 连接数据库,首先应该加载使用的 JDBC 类,IBM Informix JDBC Driver 的类名为 com.informix.jdbc.IfxDriver。
建立 Java 程序与 Informix 数据库的连接需要使用 DriverManager.getConnection() 方法,该方法中的 URL 参数为一个数据库的连接字符串,指定数据库的连接信息。使用不同的 JDBC 所需的 URL 参数也不相同。
使用 IBM Informix JDBC Driver 连接数据库,连接字符串的格式如下:
清单 4. 使用 IBM Informix JDBC Driver,连接字符串格式
jdbc:informix-sqli://[{ip-address|host-name}:{port-number|service-name}][/dbname]: INFORMIXSERVER=servername[{;user=user;password=password] |CSM=(SSO=database_server@realm,ENC=true)} [;name=value[;name=value]...]
其中,“jdbc:informix-sqli”指定使用的 JDBC 为 IBM Informix JDBC Driver;
“{ip-address|host-name}”为数据库服务器的 IP 地址主机名;
“{port-number|service-name}
”为数据库服务器监听客户端连接的端口号或服务名;
“dbname
”为数据库名;
“servername
”为数据库实例名。
IBM Data Server driver for JDBC and SQL/J
安装配置 JDBC
IBM Data Server driver for JDBC and SQL/J 是独立于 Informix 的软件,已集成在 DB2 客户端软件。单独的 IBM Data Server driver for JDBC and SQL/J 可以从 IBM 网站下载 (下载链接见参考资料)。
安装完 IBM Data Server driver for JDBC and SQL/J 后,需要将文件 db2jcc.jar 添加到环境变量 CLASSPATH 中。
清单 5. 设置 IBM Data Server driver for JDBC and SQL/J 环境变量
CLASSPATH=${CLASSPATH}:${JDBC_HOME}/jdbc_sqlj_driver/db2jcc.jar export CLASSPATH
设置 JDBC 连接字符串
在 Java 程序中使用 JDBC 连接数据库,首先应该加载使用的 JDBC 类,IBM Data Server driver for JDBC and SQL/J 的类名为 com.ibm.db2.jcc.DB2Driver。
使用 IBM Data Server driver for JDBC and SQL/J 连接数据库,连接字符串的格式如下:
清单 6. 使用 IBM Data Server driver for JDBC and SQL/J,连接字符串格式
jdbc:ids://{ip-address|host-name}:{port-number}/{dbname}: [name=value[;name=value]. . .]
其中,“jdbc:ids”指定使用的 JDBC 为 IBM Data Server driver for JDBC and SQL/J,且连接的数据库类型为 Informix;
“{ip-address|host-name}”为数据库服务器的 IP 地址主机名;
“{port-number}
”为数据库服务器监听客户端连接的端口号;
“dbname
”为数据库名。
使用 IBM Data Server driver for JDBC and SQL/J 连接 Informix 数据库不用指定数据库实例名。
Java 程序连接 Informix 数据库实例
Informix 实例环境
IP:9.123.147.100
Informix 实例名:demoserver、demoserver_drda
sqlhosts 文件:
清单 7. 服务器 sqlhosts 文件
demoserver onsoctcp 9.123.147.100 9088 demoserver_drda drsoctcp 9.123.147.100 10000
连接 Informix 数据库的 Java 程序
下面是连接 Informix 数据库的 Java 程序,先后使用 IBM Informix JDBC 和 IBM Data Server driver for JDBC and SQL/J 进行连接。从 sqlhosts 文件可以看到 Informix 实例配置了 2 个实例别名 demoserver 和 demoserver_drda,分别支持标准的 Informix 协议和 DRDA 协议。在使用 IBM Informix JDBC 连接数据库时,我们连接的是 demoserver,而使用 IBM Data Server driver for JDBC and SQL/J 时,连接的是 demoserver_drda。
清单 8. 连接 Informix 数据库 Java 程序
import java.util.*; import java.sql.*; public class test_jdbc { private static String URL_STRING[] = { "jdbc:informix-sqli://9.123.147.100:9088/sysmaster:INFORMIXSERVER=demoserver", "jdbc:ids://9.123.147.100:10000/sysmaster" } ; private static String USER = "informix"; private static String PASSWORD = "informix1"; public static void main( String[] args) throws SQLException, ClassNotFoundException { Connection conn; Class.forName("com.informix.jdbc.IfxDriver"); Class.forName("com.ibm.db2.jcc.DB2Driver"); for (int i = 0; i < 2; i++) { try { System.out.println("Testing JDBC URL: " + URL_STRING[i]); conn = DriverManager.getConnection(URL_STRING[i], USER, PASSWORD); System.out.println("connect successfully"); conn.close(); } catch( Exception e) { e.printStackTrace(); } } return; } }
结束语
本文介绍了 Java 程序连接 Informix 数据库的两种 JDBC,IBM Informix JDBC 和 IBM Data Server driver for JDBC and SQL/J,以及两种 JDBC 的安装配置和使用方法,并提供了示例程序,希望这篇文章对您开发应用程序有所帮助。
参考资料
学习
- 参考 Informix 11.7 信息中心,获得更多 Informix、DRDA、JDBC 的相关知识。
- 阅读文章“IDS Application Development Getting Started”,了解更多有关 Informix 数据库的应用开发的内容。
- 在 developerWorks 大数据专区,了解关于大数据的更多信息,获取技术文档、how-to 文章、培训、下载、产品信息以及其他资源。
- 在 developerWorks Information Management 专区,了解关于信息管理的更多信息,获取技术文档、how-to 文章、培训、下载、产品信息以及其他资源。
获得产品和技术
讨论
- 加入 developerWorks 中文社区,查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。
条评论
你好! 我在使用DB2连接informix11.7时报错:
Testing JDBC URL: jdbc:ids://192.168.1.133:9089/sysmaster
com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException: [jcc][t4][2043][11550]3.66.46 异常 java.net.ConnectException:打开端口 9,089 上服务器 /192.168.1.133 的套接字时出错,消息为:Connection refused: connect。 ERRORCODE=-4499, SQLSTATE=08001
at com.ibm.db2.jcc.am.dd.a(dd.java:321)
at com.ibm.db2.jcc.am.dd.a(dd.java:402)
at com.ibm.db2.jcc.t4.yb.a(yb.java:439)
at com.ibm.db2.jcc.t4.yb.<init>(yb.java:96)
at com.ibm.db2.jcc.t4.a.b(a.java:354)
at com.ibm.db2.jcc.t4.b.newAgent_(b.java:2049)
at com.ibm.db2.jcc.am.Connection.initConnection(Connection.java:730)
at com.ibm.db2.jcc.am.Connection.<init>(Connection.java:676)
at com.ibm.db2.jcc.t4.b.<init>(b.java:333)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:233)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:199)
at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:474)
at com.ibm.db2.jcc.DB2Drive
请 登录 或 注册 后发表评论。
注意:评论中不支持 HTML 语法