IBM WebSphere Studio Application Developer(以下簡稱爲Application Developer)是一個應用程序開發產品,它支持利用JSP、Servlet、HTML、XML、Web 服務、數據庫和 EJB等不同的技術來構建各種應用程序。特別地,ApplicationDeveloper 提供 XML 和關係數據之間的緊集成。Application Developer 支持所有 WebSphere Application Server 支持的數據庫,包括 DB2、Oracle、Sybase 和 Microsoft SQL Server。
這是本系列文章的第九部分,重點介紹Application Developer 提供的 XML 工具。第九部分研究 XML to SQL特徵,這種特徵使您能夠利用 XML文檔來更新關係數據庫表。利用該特徵,您可以根據 XML文檔的內容執行數據修改操作,比如更新、刪除和插入等。本文首先介紹XML to SQL 嚮導,它是一個可視化的工具,可以用於交互式地更新數據庫表。接着,樣本應用程序將展示主要API 的使用。
第三部分特別重要,因爲如果將這一部分的內容與本文結合起來,將可以很好地展示關係數據庫和XML 之間的循環數據訪問。
本文將由三個主要部分組成:
爲了學習該樣本,您需要安裝WebSphere Studio ApplicationDeveloper 5.0 或 5.1。
- 我們首先使用在本系列的 第三部分用過的 VIDEOS 數據庫。遵循 第三部分中的步驟來設置數據庫並根據 EMPLOYEES 表創建 SQL 查詢,如圖 1 所示。
- 一旦 SQL 查詢創建完畢,我們就將使用 XML From SQL 嚮導(圖 2)帶有其他構件(比如語法文件、缺省的 XSL 文件)的 XML 文件。在此之前,我們先在 VideoStoreProject 中創建一個文件夾來存儲所有的結果構件。在本文中,我們將此文件夾命名爲
Employees
。 - 打開向導,右鍵單擊 select_employees,如圖 1 所示,然後選擇 Generate new XML...。選擇 DTD作爲 Schema 定義,將輸出文件夾命名爲
/VideoStoreProject/Employees
。
如圖 2 所示。 - 單擊 Finish從 SQL 查詢生成 XML 構件作。這將會在在輸出文件夾中生成 XML、DTD、XSL、和 HTML 文件。HTML 的結果如表 1 所示。
表 1. 生成的 SQL 查詢結果 (
select_
employees.xml
)EMP_ID 名稱 JOB_TITLE HIRE_DATE 存儲 10 Allan Baker Manager 2000-01-01 1 11 Carol Dan Manager 2000-01-01 2 20 Eric Frank Sales Rep 2000-01-02 1 21 Garry Hans Asst Sales Rep 2000-02-01 1 22 Ivan James Sales Rep 2000-02-01 2 12 Karen Law Manager 2000-06-05 3 23 Mike Nichols Sales Rep 2000-06-06 3
在下一章節中,我們將修改結果 XML 文件的內容,然後通過更新數據庫表來反映 XML 內容的改變。生成的 SQL 查詢結果的部分 XML 代碼(
select_employees.xml
):<?xml version="1.0" encoding="UTF-8"?> <SQLResult> ... <EMPLOYEES> <EMP_ID>21</EMP_ID> <NAME>Garry Hans</NAME> <JOB_TITLE>Asst Sales Rep</JOB_TITLE> <HIRE_DATE>2000-02-01</HIRE_DATE> <STORE>1</STORE> </EMPLOYEES> <EMPLOYEES> <EMP_ID>22</EMP_ID> <NAME>Ivan James</NAME> <JOB_TITLE>Sales Rep</JOB_TITLE> <HIRE_DATE>2000-02-01</HIRE_DATE> <STORE>2</STORE> </EMPLOYEES> ... </SQLResult>
XML提供了許多更新數據庫的方法。在這一部分中,我們將通過 XML To SQL嚮導來更新 EMPLOYEES 表。
- 首先, 我們將修改前一部分生成的 XML 文件。但是請注意,我們不能修改您聲明的主鍵列或任何其他的鍵列;在本例中,
EMP_ID
是主鍵列。我們將會如下更新employees.xml
中的兩行:Garry 提升爲 Sales Rep,而 Ivan 提升爲存儲 1 中的 Manager。我們將select_employees.xml
複製到employees.xml
並修改相關內容,如下面的粗體文本所示:修改 XML 內容來更新數據庫(
employees.xml
):<?xml version="1.0" encoding="UTF-8"?> <SQLResult> <EMPLOYEES> <EMP_ID>21</EMP_ID> <NAME>Garry Hans</NAME> <JOB_TITLE>Sales Rep</JOB_TITLE> <HIRE_DATE>2000-02-01</HIRE_DATE> <STORE>1</STORE> </EMPLOYEES> <EMPLOYEES> <EMP_ID>22</EMP_ID> <NAME>Ivan James</NAME> <JOB_TITLE>Manager</JOB_TITLE> <HIRE_DATE>2000-02-01</HIRE_DATE> <STORE>1</STORE> </EMPLOYEES> </SQLResult>
- 文件修改完後,在文件上單擊右鍵,在 Navigator 視圖中調用 XML To SQL 嚮導。您可以選擇 File => New => Other... => XML 來啓動向導。圖 3 顯示了嚮導的第一個對話框,可以用來準備數據庫連接。我們可以創建一個新的連接或重用前面已經創建好的 Video連接。選擇 Use existing connection:,然後選擇 Next。
- 在下一個對話框中(圖 4),從 Action 下拉列表中選擇 UPDATE,因爲我們將更新 EMPLOYEES 表。(在其他的 Schema 中可能會存在同名的表,所以務必保證選擇正確的 Schema。)
圖 4. Action(和可選的 Schema ) 選擇頁
- 在 XML to SQL 嚮導的最後一頁上,選擇 JOB_TITLE和 STORE,它們是需要更新的列。標有鑰匙圖標的鍵列字段是不可選的。單擊 Finish完成數據庫表的更新。
圖 5.
在這一部分中,我們將開發一個使用 XMLToSQL API 進行 VIDEOS數據庫更新的命令行應用程序。利用這個應用程序,您可以通過輸入XML 文件來更新 Employees 表的記錄、在 Employees表中插入新的記錄或刪除現有的記錄。輸入 XML文件的格式必須符合由SQL To XML嚮導生成 XML 文件的要求。此樣本程序僅僅演示 API可以如何用來執行數據庫操作。在 plugins_directory/com.ibm.etools.sqltoxml/jars/sqltoxml_javadoc.zip
上可以找到API的完整的Javadoc。
該類用於提供XMLToSQL 更新數據庫表所必需的數據。該類的實例用作 XMLToSQL 構造器的一個參數。
首先,創建一個 SQLProperties實例,同時提供目標操作(包括數據庫用戶 ID、密碼,JDBC 連接信息以及SQL命令模式(比如更新、插入或刪除))所必需的信息。這些信息可以通過該類的set 方法來獲得,也可以外部 XST 文件(可以作爲 SQL to XML的一部分生成)來提供。
下面的樣本代碼提供了使用 SET 方法所需的信息。
使用SQLProperties:
|
注意上面的代碼片段,如果我們想提供我們自己的JDBC 連接信息,那麼粗體部分就是不需要的。這可以調用MLToSQL.setConnection(java.sql.Connection)方法來完成。
對於我們的樣本程序,我們將使用外部XST 文件來加載信息。文件內容如下所示:
update_employees.xst
:
|
下面的代碼顯示瞭如何將XST 文件加載到 SQLProperties。
代碼示例:loadProperties()
|
一旦準備好SQLProperties,我們就需要去創建一個使用 XML 文檔進行記錄的添加、修改、刪除操作的XMLToSQL 實例。XML結構和數據庫表之間的映射關係是建立在一組映射規則上的。如下面的XML 片段所示:
XMLToSQL 映射規則
|
- 根元素可以包含 0-n 個元素。根元素的標籤是不相關的。根目錄所包含的全部元素都按照特定的操作類型進行處理。
- 每個元素都映射到相對應表中的一行上。例如,EMPLOYEE 元素映射到 EMPLOYEE 表。EMPLOYEE 的子元素根據名稱映射到 EMPLOYEE 表的兩列。也就是說,FIRSTNAME 元素對應 EMPLOYEE 表中的 FIRSTNAME 列,LASTNAME 元素對應 EMPLOYEE 表中的 LASTNAME 列。
- XMLToSQL 庫能根據表中所對應的列的列值和數據類型來創建適當的 SQL 語句(例如插入、更新或刪除)。
首先採用SQLToXML 運行時庫來創建有效的XML文檔,然後再修改它來提供用於更新的值是個很好的方法。同時,您也可以在編寫使用XMLToSQL 運行時庫的代碼之前通過 XML To SQL 嚮導進行 XML文檔的單元測試。
我們在前面的部分中創建的 SQLProperties已傳遞到了 XMLToSQL 構造器中。XMLToSQL創建完後,就可以設置主鍵列和目標列了。下面的樣本代碼演示了這些步驟:
代碼示例-- execute()
|
從上面的代碼中可以發現三件有趣的事情,它展示了在配置XMLToSQL 的過程中其他的一些靈活性:
- prop.setAction() 用於覆蓋在
update_employees.xst
中指定的操作。例如,如果我們想刪除所對應的行而不是更新它們,我們就可以使用 prop.setAction(SQLProperties.DELETE)。 - 如果我們想使用 XMLToSQL 來顯示 SQL 語句,當在命令行上執行操作時,xml2sql.setTrace(true) 就可以打印出 SQL 語句。同時我們還可以把 java.io.PrintWriter 作爲附加的參數來使用 setTrace()。詳細信息請參閱 Javadoc。
- 注意 xml2sql.setConnection() 方法。如果沒有它,XMLToSQL 在執行一個操作前,將使用用戶提供的數據庫信息來創建 JDBC 連接,完成操作後,又會關閉連接。但是,setConnection() 能夠提供一外部連接,那麼在這種情況下,XMLToSQL 就會改爲使用此連接。該用戶將負責清理隨後操作中的連接。
main() 方法從命令行中提取 XST 和 XML文件的名稱,同時設置諸如 UPDATE 等操作類型。由於 update_employees.xst
已經定義了 UPDATE操作,所以就沒有必要來覆蓋操作了,除非我們想介紹這種方法的使用。同樣地,一旦設置好變量,我們就可以通過調用update.execute()方法來執行操作。
代碼示例 -- main()
|
本文中所描述的源代碼可以從 下載文件中獲得。解壓 下載文件,並將下列文件添加到工作目錄:
plugins_directory/com.ibm.etools.sqltoxml/jars/sqltoxml.jar
plugins_directory/com.ibm.etools.sqltoxml/jars/xmltosql.jar
plugins_directory/org..apache.xerces/xercesImpl.jar
plugins_directory/org..apache.xerces/xmlParserAPIs.jar
db2java.zip
(DB2 JDBC driver) from your DB2 installation directory
下載文件還包含對您有用的這些文件:
build.bat
: 編譯 UpdateEmployees.javaupdate.bat
: 數據庫修改
要編譯 UpdateEmployees.java
,請鍵入如下命令: > build
要執行該程序,請鍵入如下命令: > update update_employees.xst employees.xml
本文說明了如何使用WebSphere Studio Application Developer 中的 XML To SQL 嚮導和運行時 API來完成 XML 和關係數據庫之間數據的來回轉移。API 廣泛用於支持JDBC驅動程序的各種數據庫產品。而且,可以通過諸如連接池機制等其他方式來創建JDBC 連接。
最近,主流的數據庫廠商開始在由數據庫查詢生成XML 領域採用 SQL/XML 標準。XQuery 的使用也開始出現。但是,由於這些標準當前都集中到了由查詢生成XML 上,所以在這些標準成熟之前,SQLToXML和 XMLToSQL API 的組合使用將是 XM L和關係數據庫之間進行數據轉移的合理途徑。
Name | Size | Download method | |||||||||
xmltosql_sample_pgm.zip | 4 KB | HTTP | |||||||||