informix jdbc連接

第 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 章。 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章