首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

使用 pureQuery 優化現有 JDBC 應用程式:從動態 SQL 到靜態 SQL 的遷移實戰

     編輯:Java 相關知識

IBM Data Studio pureQuery 提供高效能資料存取平台,核心優勢在於輕鬆啟用靜態 SQL:SQL 準備步驟在部署前完成,執行期效能更佳,且免疫 SQL 注入攻擊。pureQuery 1.2 推出Client Optimization (pureQuery for JDBC applications),無須重寫既有 JDBC 程式碼 (含 Hibernate/JPA) 即可享受靜態 SQL 優勢。

啟用流程五階段

  1. 規劃:評估應用程式是否符合前置條件 (JRE 1.5+、DBA 同意套件式安全模型等)。
  2. 捕捉:執行應用程式,驅動程式記錄 SQL 與中繼資料至 .pdqxml。
  3. 配置:定義資料庫套件特徵 (套件名、版本、每套件 SQL 上限等)。
  4. 綁定:將 SQL 綁定至資料庫套件 (或產生 DBRM 稍後部署)。
  5. 執行與驗證:切換靜態模式執行,驗證功能正確性。

此過程具迭代性,常需多輪捕捉-綁定-驗證。

教學環境建置

  • Data Studio Developer 1.2
  • DB2 Express-C 9 (或支援平台)
  • 範例專案 ClientOptimizationProject.zip、資料庫腳本 DB_Script.sql

步驟實作

1. 建立範例資料庫與匯入專案

執行 db2 -tf DB_Script.sql 建立 GS_DB;Eclipse 中建立 Java 專案 ClientOptimization,匯入範例原始碼 (含 BasicJDBCApp 兩條程式碼路徑)。

2. 註冊資料庫連線並啟用 pureQuery 支援

Database Explorer 新增 GS_DB 連線;專案右鍵 pureQuery > Add pureQuery Support,勾選 Enable SQL capturing and binding for JDBC applications。專案自動加入 JCC 驅動、pdq.jar、配置檔 (DB2JccConfiguration.properties、*.genProps、*.bindProps)。

3. 啟用 SQL 捕捉並執行程式碼路徑 1

編輯 DB2JccConfiguration.properties:captureMode=ON、executionMode=DYNAMIC、指定 pureQueryXml 路徑。建立 Run Configuration,參數帶入 JDBC URL、User、Password、1 (僅跑路徑 1)。建議加入 VM 參數 -Dpdq.traceLevel=FINE 啟用日誌。

4. 瀏覽捕捉中繼資料 (pureQuery Outline)

捕捉完成後專案出現 capture.pdqxml、pdq.log。Outline 視圖三分頁:

  • Database:階層顯示存取的資料庫物件、查詢、堆疊追蹤;可跳轉原始碼、執行 SQL、啟動 Visual Explain。
  • Java:依套件/類別分組,快速定位資料存取層。
  • SQL:預覽將建立的套件與 SQL 對應。

5. 配置套件特徵與綁定選項

編輯 Default.genProps:修改套件名稱前綴 (如 REPP)、集合 ID、版本號。編輯 Default.bindProps:調整 defaultOptions、綁定選項 (隔離層級等)。存檔後專案重建,Outline 刷新預覽更新後套件結構。

6. 綁定至資料庫

右鍵 capture.pdqxml 選 pureQuery > Bind,目標選 GS_DB。Console 顯示成功訊息。Database Explorer 驗證套件 REPP 存在且包含預期 SQL (四隔離層級各一份)。

7. 切換靜態執行模式驗證

修改 DB2JccConfiguration.properties:captureMode=OFF、executionMode=STATIC。重跑路徑 1,應成功靜態執行。修改 Run Configuration 移除參數 4 (跑雙路徑),驗證路徑 2 的 SQL 因未捕捉而動態執行 (預設 allowDynamicSQL=TRUE)。

8. 強制純靜態模式與增量捕捉

設定 allowDynamicSQL=FALSE,重跑雙路徑將拋出 SQLException (缺少中繼資料)。回到捕捉模式 (captureMode=ON, executionMode=STATIC, allowDynamicSQL=TRUE) 跑路徑 2 增量捕捉。刷新 Outline,檢視新增 SQL,重新綁定。最終設定 captureMode=OFF, executionMode=STATIC, allowDynamicSQL=FALSE,分別跑路徑 1、2、雙路徑,全部靜態執行成功。

生產部署考量

  • 安全性:從物件權限轉為套件權限,影響存取控制。
  • JDBC 限制:某些寫法無法靜態化,若原始碼不可改須動態執行。
  • 自動化:中大型專案可用命令列工具批次綁定多環境。
  • 角色協作:開發、DBA、部署人員需緊密配合。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved