使用陳述式與結果集

下載 JDBC 驅動程式

當使用適用於 SQL Server 的 Microsoft JDBC 驅動程式及其所提供的陳述式和結果集物件時,有好幾種技術可供您用來改善應用程式的效能和可靠程度。

使用適當的陳述式物件

當您使用其中一個 JDBC 驅動程式陳述式物件 (例如 SQLServerStatement、SQLServerPreparedStatement 或 SQLServerCallableStatement 物件) 時,請確定正在對工作使用適當的物件。

  • 如果沒有 OUT 參數,您不需要使用 SQLServerCallableStatement 物件。 請改為使用 SQLServerStatement 或 SQLServerPreparedStatement 物件。
  • 如果不想要多次執行陳述式,或者沒有 IN 或 OUT 參數,您不需要使用 SQLServerCallableStatement 或 SQLServerPreparedStatement 物件。 請改為使用 SQLServerStatement 物件。

為 ResultSet 物件使用適當的並行模式

除非您真的想要更新結果,否則當建立會產生結果集的陳述式時,請不要要求可更新的並行。 預設的僅向前、唯讀游標模型最適合快速讀取小型結果集。

限制結果集的大小

考慮使用 setMaxRows 方法(或 SET ROWCOUNT SELECT TOP N SQL 語法)來限制可能來自大型結果集的列數。 如果您必須處理大型結果集,請考慮設定連接字串屬性 responseBuffering=adaptive (預設模式),藉此使用適應性回應緩衝。 這種方法會允許應用程式處理大型結果集,而不需要伺服器端資料指標,而且會將應用程式的記憶體使用量降到最低。 如需詳細資訊,請參閱使用自適性緩衝。

使用適當的擷取大小

對於唯讀的伺服器游標,取捨在於與伺服器之間的往返次數,以及驅動程式所使用的記憶體量。 對於可更新的伺服器游標,擷取大小也會影響結果集對變更的敏感度,以及對伺服器上並行處理情況的反應。 在明確呼叫 refreshRow 方法之前,或在游標離開提取緩衝區之前,對目前提取緩衝區內資料列所做的更新都不會顯示。 較大的擷取緩衝區會有較佳的效能(較少的伺服器往返次數),但對變更較不敏感;如果使用 CONCUR_SS_SCROLL_LOCKS (1009),還會降低伺服器的並行處理能力。 如需對變更最敏感,請將擷取大小設為 1。 然而,此設定將會導致每一個提取的資料列都要往返於伺服器。

結果集讀取路徑優化

從版本 13.6 開始,驅動程式在讀取結果集時會減少暫時配置,並對常見字串、 DECIMAL、 NUMERIC、 MONEY和 SMALLMONEY 值使用快速路徑。 這些優化是自動進行的,能降低大型且廣泛的結果集的垃圾回收壓力。 不需要任何應用程式設定。

對大型 IN 參數使用串流

使用資料流或以遞增方式具體化的 BLOB 和 CLOB,處理更新大型資料行值或傳送大型 IN 參數。 JDBC 驅動程式會多次往返將這些類型「大量」送至伺服器,容許您設定及更新的值大於記憶體可包含的值。