Informazioni sul controllo della concorrenza

Il controllo della concorrenza si riferisce alle varie tecniche utilizzate per mantenere l'integrità del database quando più utenti aggiornano le righe contemporaneamente. Una concorrenza non corretta può causare problemi come letture dirty, letture fantasma e letture non ripetibili. Il driver JDBC per Microsoft SQL Server 2005 fornisce interfacce per tutte le tecniche di concorrenza utilizzate da SQL Server per risolvere questi problemi.

Nota

Per ulteriori informazioni sulla concorrenza di SQL Server, vedere "Gestione dell'accesso ai dati simultaneo" nella documentazione in linea di SQL Server.

Il driver JDBC supporta i tipi di concorrenza seguenti:

Tipo di concorrenza Caratteristiche Blocchi di riga Descrizione

CONCUR_READ_ONLY

Di sola lettura

No

Gli aggiornamenti eseguiti tramite il cursore non sono consentiti e sulle righe del set di risultati non viene mantenuto attivo alcun blocco.

CONCUR_UPDATABLE

Ottimistica di lettura e scrittura

No

Si presuppone che le contese tra le righe nel database siano improbabili, ma possibili. L'integrità delle righe viene verificata tramite confronto del timestamp.

CONCUR_SS_SCROLL_LOCKS

Pessimistica di lettura e scrittura

Si presuppone che le contese tra le righe nel database siano probabili. L'integrità delle righe viene assicurata tramite i blocchi di riga.

CONCUR_SS_OPTIMISTIC_CC

Ottimistica di lettura e scrittura

No

Si presuppone che le contese tra le righe nel database siano improbabili, ma possibili. L'integrità delle righe viene verificata tramite confronto del timestamp.

In SQL Server 2005 il server modifica questa impostazione in CONCUR_SS_OPTIMISTIC_CCVAL se nella tabella non è inclusa una colonna timestamp.

In SQL Server 2000 se nella tabella sottostante è inclusa una colonna timestamp, viene utilizzata l'opzione OPTIMISTIC WITH ROW VERSIONING anche se si specifica l'opzione OPTIMISTIC WITH VALUES. Se si specifica l'opzione OPTIMISTIC WITH ROW VERSIONING e nella tabella non sono incluse colonne timestamp, viene utilizzata l'opzione OPTIMISTIC WITH VALUES.

CONCUR_SS_OPTIMISTIC_CCVAL

Ottimistica di lettura e scrittura

No

Si presuppone che le contese tra le righe nel database siano improbabili, ma possibili. L'integrità delle righe viene verificata tramite confronto dei dati della riga.

Set di risultati non aggiornabili

Un set di risultati aggiornabile è un set di risultati in cui è possibile inserire, aggiornare ed eliminare righe. Nei casi seguenti, in SQL Server non è possibile creare un cursore aggiornabile e viene generata l'eccezione "Il set di risultati non è aggiornabile".

Causa Descrizione Rimedio

L'istruzione non viene creata utilizzando la sintassi JDBC 2.0

In JDBC 2.0 sono stati introdotti nuovi metodi per la creazione di istruzioni. Se viene utilizzata la sintassi JDBC 1.0, il set di risultati per impostazione predefinita è di sola lettura.

Specificare il tipo di set di risultati e la concorrenza in fase di creazione dell'istruzione.

L'istruzione viene creata utilizzando TYPE_SCROLL_INSENSITIVE

SQL Server crea un cursore snapshot statico. Il cursore è disconnesso dalle righe della tabella sottostante per proteggerlo dagli aggiornamenti apportati alle righe da altri utenti.

Utilizzare TYPE_SCROLL_SENSITIVE, TYPE_SS_SCROLL_KEYSET, TYPE_SS_SCROLL_DYNAMIC o TYPE_FORWARD_ONLY con CONCUR_UPDATABLE per evitare di creare un cursore statico.

La struttura della tabella non consente un cursore di tipo KEYSET o DYNAMIC

La tabella sottostante non dispone di chiavi univoche per consentire a SQL Server di identificare in modo univoco una riga.

Aggiungere chiavi univoche alla tabella per consentire l'identificazione univoca di ogni riga.

Vedere anche

Altre risorse

Gestione dei set di risultati con il driver JDBC