2010-03-18 72 views
1

我想使用JPA over JDBC來創建新應用程序。我嚴格使用JPA實體管理器的命名查詢和基本CRUD方法,它允許我(在Hibernate或任何其他JPA實現的幫助下)提取將在數據庫上執行的所有SQL本機查詢。通過這個靜態查詢列表,我明白我可以構建一個DB2包,它是我的請求的所有執行計劃。針對不使用PureQuery的DB2執行靜態SQL查詢

所以我的問題是:通過JDBC對DB2執行這些查詢是否會利用這些執行計劃,或不是?我瞭解PureQuery產品可以捕獲sql訂單的列表。它是否仍然通過JDBC而不是通過PureQuery特定的API提供更多?這種特定的DB2靜態綁定功能?或者它相當於JDBC?

謝謝你的任何回答。

+0

問題已回答,無論如何,請隨時添加與此主題相關的其他評論! – aravisski 2010-03-19 09:23:00

回答

4

JDBC應用程序只執行動態SQL(即DB2不使用靜態包)。

只有兩種方法可以獲得靜態SQL(其中查詢存儲在數據庫的包中):使用SQLJ(它消除了JPA/Hibernate)或使用pureQuery(它位於JDBC和數據庫之間)編寫應用程序)。請記住,即使使用動態SQL,DB2也會緩存查詢的執行計劃,因此如果它們的執行頻率不夠(即它們仍保留在緩存中),那麼您將看不到查詢編譯的開銷。只有當查詢是一個確切的逐字節匹配時,緩存纔有用,因此select * from t1 where c1 = 1select * from t1 where c1 = 2select * from t1 where C1 = 1(它們給出相同的結果,但查詢不同)不一樣。使用參數標記(select * from t1 where c1 = ?)是關鍵。您的DBA可以調整目錄高速緩存的大小,以幫助最大限度地提高此高速緩存的命中率。

儘管緩存有助於避免反覆編譯查詢,但它不提供靜態SQL所執行的計劃穩定性,因此YMMV。

+0

謝謝你這個有價值的答案:) – aravisski 2010-03-19 09:22:17