informix jdbc连接

章景同
2023-12-01

第 1 步:到 Informix 数据库的 JDBC 连接

开发到 Informix 的连接所需的 Java 库是 Informix ClientSDK 软件包。如果您的数据库在不同的主机上,并且您的本地开发环境是不同的平台(UNIX?0?3 数据库服务器,Linux?0?3 开发环境),请确保根据运行 Java 代码的平台来下载 ClientSDK。

将合适的库目录添加到 ClientSDK 的 CLASSPATH 环境变量(它将包含 ifxjdbc.jar、ifxjdbcx.jar、ifxlang.jar 等等)。

数据服务器将只接受使用 TCP 接口的 JDBC 连接。这可能需要针对您的环境进行配置,并将需要编辑 /etc/hosts、onconfig 和 sqlhosts 文件。有关更多信息,请参阅 Informix Infocenter documentation。

要创建到 Informix 的 JDBC 连接,需要一个 URL 来确定目标数据库,并提供合适的用户凭据;例如: 


jdbc:informix-sqli://10.0.0.102:40000/stores_demo:INFORMIXSERVER=demo_on_tcp;user=
 informix;password=informix 






使用 JDBC 连接到 Informix 的 Java 代码示例:



... 
static Connection informixConnection = null;
 ...
 
 try {
 Class.forName("com.informix.jdbc.IfxDriver");
 } catch (Exception e) {
 System.out.println("FAILED: failed to load Informix JDBC driver.");
 }
 try {
 informixConnection = DriverManager.getConnection(jdbcURL);
 } catch (SQLException e) {
 System.out.println("FAILED: failed to connect!");
 System.out.println(jdbcURL);
 System.out.println(e.getMessage());
 e.printStackTrace();
 }
 try {
 informixConnection.setReadOnly(true);
 } catch (SQLException e) {
 e.printStackTrace();
 }
 

在完成程序前需要以下代码来关闭连接: 


 try {
 informixConnection.close();
 } catch (SQLException e) {
 System.out.println("FAILED: failed to close the connection!");
 }
 System.out.println("Disconnect from source database.");
 
 

 

在上述例子中,一旦连接成功,活动连接将被保存在 “informixConnection” 变量中。

第 2 步:确定从 Informix 选择的行和列(Select)

当将数据推向 WebSphere Information Integrator OmniFind Edition 时,需要几部分信息。这包括可搜索的实际内容和几部分元数据(包括惟一资源标识符(URI)),以便惟一地识别稍后检索的行。该 URI 通常需要表中一个键记录值,比如 ID 列。如果被推的数据不是普通文本数据(如以 blob 类型存储的 Acrobat PDF 文件),则需要收集足够的数据来建立 MIME 类型,以便解析器正确执行。

使用 STORES_DEMO 数据库中的 CATALOG 表作为例子,我们可能对搜索目录描述(cat_descr 栏)感兴趣。为了惟一地标识每一行,我们将需要目录 ID 号(catalog_num)。

select 语句类似如下: SELECT catalog_num, cat_descr FROM catalog


执行查询的 Java 代码为:



...
 // Execute the SELECT statement
 stmt = informixConnection.createStatement();
 ResultSet queryResults = stmt.executeQuery("SELECT catalog_num,cat_descr FROM catalog;");
 
 // Get the result set
 ResultSetMetaData queryResultsMetaData = queryResults.getMetaData();
 int numOfCols = queryResultsMetaData.getColumnCount();
 
 // For each row in the result set...
 while (queryResults.next()) {
 totalSelected = totalSelected 1;
 
 // Build a URI for the row... table,id_column,id
 uri = "informix://stores_demo/catalog/catalog_num/" queryResults.getString(1);
 content_type = "text/plain";
 
 // Grab the content which is in the cat_descr column 

content = queryResults.getString("cat_descr").getBytes();
 
 // Push the result to the DataListener and keep count of successes
 ...
 
 } catch (Exception e) {
 e.printStackTrace();
 }
...
 

 

上述例子为基本文本数据提供了一个牢固的起点。在本文附带的 ids2omf.java 文件中, 编码反映了需要检查返回的数据类型(BLOB)并根据数据库记录建立正确的 MIME 类型。

第 3 步:为 WebSphere Information Integrator OmniFind Edition 配置 DataListener 环境(Configure)

当 WebSphere Information Integrator OmniFind Edition 启动时,DataListener 也默认启动。但是,如果没有在 WebSphere Information Integrator OmniFind Edition 环境中定义用户并让用户凭据与集合中保持一致,Listener 将无法接受连接。

DataListener 配置可以在 System: DataListener (edit) 菜单中找到。该用户 ID 的作用范围仅限于到 WebSphere Information Integrator OmniFind Edition 中的 DataListener 的连接。

注意:在该菜单中使用了 “Collection Name”;但是实际上,“Collection_ID” 对于 DataListener 客户端代码正确操作是必需的。


图 2. 配置 DataListener 屏幕



检查 DataListener 的监视菜单显示等待处理的请求(队列),而不是已经处理的请求。当检查您的代码是否工作时(当我们开始测试时),该屏幕没有提供大量有用的信息;但是,这是值得检查的,可以确保 Listener 正在运行。


图 3. DataListener 监视菜单



第 4 步:开发合适的代码来连接 DataListener

实际的推操作是一个两步过程。首先,元数据记录需要被填充,第二步,元数据记录和内容被真正推向 Listener。注意,实际内容被处理两次,一次在元数据记录中,一次在实际的推调用中。

大多数的元数据字段不是必需的;但是,如果您打算推非文本数据(比如 PDF 文件或 Word 文档),内容类型是必需的。如果正确的内容类型未通过,解析器将出现问题,通常会拒绝该文档(在我们的例子中,Stellant 解析器未能成功地建立正确的文档类型)。通过基于 Web 的 WebSphere Information Integrator OmniFind Edition Administration 接口检查日志文件,确定您的内容是被解析器拒绝还是忽略。

到 Listener 的连接不是持久连接;因此,不必针对 “连接,在完成所有事情前循环,断开连接” 进行编码。


元数据对象编码



 ...
 // Build a default metadata object 
 DataSourceMetadata DSMetaData = DLDataPusher.createDataSourceMetadata(
 "informix", // Datasource
 "ids2omf", // Client application identifier
 "informix", // Datasource name
 0, // score (unused)
 new Date(), // Date 
 "", // Language 
 ", // Security access tokens
 "text/plain", // Content type of content (mime type)
 "", // Character set
 content ); // Actual content
 
 // call the push method
 try {
 DLResponse dlRes = DLDataPusher.pushData(hostname, port, clientID,
 passwd, uri, collectionID, DSMetaData, content);
 
 // check the result
 if (dlRes != null)
 if (dlRes.getCodeName() == "SUCCESS")
 recordsPushed = recordsPushed 1;
 else {
 System.out.println("Problem pushing to OmniFind: URI:" uri "Problem:" 
 dlRes.toString());
 }
 } catch (Exception e) {
 e.printStackTrace();
 }
 ...
 

 

Datasource 的 Client application identifier 和 datasource name 字段可以用您的环境中的任何信息来填充。这些值对于 WebSphere Information Integrator OmniFind Edition 正常工作不是必需的。

第 5 步:将所有内容放在一起 
本文附带的 ids2omf.java 文件实现了本文所描述的功能。要使代码更灵活,所做的其他工作是读取和解析一个 XML 参数文件,该文件定义 Informix 连接参数;SELECT 语句和关键列;以及 WebSphere Information Integrator OmniFind Edition 参数。

要编译该代码,以下 JAR 文件必须在您的 CLASSPATH 环境变量中可以访问: siapi.jar、es.dl.client.jar、es.dl.server.jar、esapi.jar、ifxjdbc.jar、es.oss.jar、ifxtools.jar、ifxjdbcx.jar、ifxlang.jar、ifxlsupp.jar、ifxsqlj.jar


运行示例代码



esadmin@linux:~/ids2omf> cat set_classpath.sh

export CLASSPATH=/opt/IBM/es/lib/siapi.jar:/opt/IBM/es/lib/es.dl.client.jar:
/opt/IBM/es/lib/es.dl.server.jar:/opt/IBM/es/lib/esapi.jar:/opt/IBM/es/lib/es.oss.jar:
/opt/IBM/informix/jdbc/lib/ifxjdbc.jar:/opt/IBM/informix/jdbc/lib/ifxtools.jar:
/opt/IBM/informix/jdbc/lib/ifxjdbcx.jar:/opt/IBM/informix/jdbc/lib/ifxlang.jar:
/opt/IBM/informix/jdbc/lib/ifxlsupp.jar:/opt/IBM/informix/jdbc/lib/ifxsqlj.jar:.

esadmin@linux:~/ids2omf> . ./set_classpath.sh

esadmin@linux:~/ids2omf> javac ids2omf.java

esadmin@linux:~/ids2omf> java -cp .:$CLASSPATH ids2omf sources.xml
-------------------------------------------------------------------------
Starting Informix to OmniFind utility
-------------------------------------------------------------------------
Input Parameter file:sources.xml
Informix URL: jdbc:informix-sqli://10.0.0.106:40000/stores_demo:
 INFORMIXSERVER=demo_on_tcp;user=informix;password=informix
OmniFind Target:10.0.0.106:6668:test:test:col_33762
Source selections in parameter file: 1
Connected to source database.
-------------------------------------------------------------------------
 Tables: cust_calls
 Where_clause: ""
 Key column:customer_num
 Data Column: call_descr
 Data Type Column: "text/plain"
Push complete: Records selected:7, Records pushed:7
Disconnect from source database.
-------------------------------------------------------------------------

esadmin@linux:~/ids2omf>
 

 

不推荐的 DataListener 方法

DataListener 接口在 WebSphere Information Integrator OmniFind Edition 的 Version 8.3 中已经不再推荐使用,取而代之的是一种更新型的接口。本文中使用的 Java 例子仍然如 Version 8.3 中所述的那样运行;但是,在未来版本中,应该使用 Search 和 Index API 调用。

有关更多信息,请参阅 Programming Guide and API Reference V8.3 的第 4 章。 
 

 类似资料: