並行控制意指多個使用者同時更新資料列時,用於保留資料庫完整性的各種技術。並行不正確可能導致的問題包括中途讀取、幽靈讀取,以及不可重複讀取。Microsoft SQL Server 2005 JDBC Driver 提供介面給 SQL Server 所使用的所有並行技術來解決這些問題。
注意
如需有關 SQL Server 並行的詳細資訊,請參閱《SQL Server 線上叢書》中的<管理並行資料存取>。
JDBC 驅動程式支援下列並行類型:
| 並行類型 | 特性 | 資料列鎖定 | 描述 |
|---|---|---|---|
CONCUR_READ_ONLY |
唯讀 |
否 |
不允許透過資料指標進行更新,且構成結果集之資料列中不保留鎖定。 |
CONCUR_UPDATABLE |
開放式讀寫 |
否 |
資料庫假設未必會發生資料列爭用,但是有可能。資料列的完整性會透過時間戳記比較來確認。 |
CONCUR_SS_SCROLL_LOCKS |
封閉式 (Pessimistic) 讀寫 |
是 |
資料庫假設可能會發生資料列爭用。資料列的完整性會透過資料列鎖定來確保。 |
CONCUR_SS_OPTIMISTIC_CC |
開放式讀寫 |
否 |
資料庫假設未必會發生資料列爭用,但是有可能。資料列的完整性會透過時間戳記比較來確認。 對於 SQL Server 2005,如果資料表不包含時間戳記資料行,伺服器會將其變更為 CONCUR_SS_OPTIMISTIC_CCVAL。 在 SQL Server 2000 中,如果基礎資料表有時間戳記資料行,即使有指定 OPTIMISTIC WITH VALUES,也會使用 OPTIMISTIC WITH ROW VERSIONING。如果指定了 OPTIMISTIC WITH ROW VERSIONING,且資料表沒有時間戳記,就會使用 OPTIMISTIC WITH VALUES。 |
CONCUR_SS_OPTIMISTIC_CCVAL |
開放式讀寫 |
否 |
資料庫假設未必會發生資料列爭用,但是有可能。資料列的完整性會透過資料列資料比較來確認。 |
不可更新的結果集
可更新的結果集是可以在其中插入、更新和刪除的資料集。在下列情況下,SQL Server 無法建立可更新的資料指標。產生的例外狀況為:「結果集無法更新。」。
| 原因 | 描述 | 補救方法 |
|---|---|---|
使用 JDBC 2.0 語法沒有建立陳述式 |
JDBC 2.0 推出建立陳述式的新方法。如果使用 JDBC 1.0 語法,結果集預設為唯讀。 |
建立陳述式時,指定結果集類型與並行。 |
使用 TYPE_SCROLL_INSENSITIVE 建立陳述式 |
SQL Server 會建立靜態快照集資料指標。這會與基礎資料表資料列中斷連接,以防資料指標遭到其他使用者更新資料列。 |
搭配 CONCUR_UPDATABLE 使用 TYPE_SCROLL_SENSITIVE、TYPE_SS_SCROLL_KEYSET、TYPE_SS_SCROLL_DYNAMIC 或 TYPE_FORWARD_ONLY 以防建立靜態資料指標。 |
資料表設計會避開 KEYSET 或 DYNAMIC 資料指標 |
基礎資料表沒有唯一的索引鍵,讓 SQL Server 唯一識別資料列。 |
將唯一的索引鍵加入到資料表中即可提供每個資料列的唯一識別。 |