Informazioni sulle differenze tra i tipi di dati
Tra i tipi di dati del linguaggio di programmazione Java e i tipi di dati di SQL Server sono riscontrabili numerose differenze. Il driver JDBC per Microsoft SQL Server consente di superare tali differenze tramite vari tipi di conversioni.
Tipi di caratteri
I dati di tipo stringa di caratteri di JDBC sono i tipi CHAR, VARCHAR e LONGVARCHAR. A partire dalla versione 2.0 del driver JDBC per Microsoft SQL Server, viene fornito il supporto per l'API di JDBC 4.0. In JDBC 4.0 i dati di tipo stringa di caratteri JDBC possono essere anche di tipo NCHAR, NVARCHAR e LONGNVARCHAR. Questi nuovi tipi di stringhe di caratteri mantengono i tipi di caratteri nativi di Java in formato Unicode pertanto non richiedono più conversioni da ANSI a Unicode o viceversa.
Tipo | Descrizione |
---|---|
A lunghezza fissa |
I tipi di dati char e nchar di SQL Server sono mappati direttamente ai tipi CHAR e NCHAR di JDBC. Si tratta di tipi a lunghezza fissa con spaziatura messi a disposizione dal server nel caso in cui la colonna presenti SET ANSI_PADDING ON. Il riempimento è sempre attivato per il tipo nchar, mentre per il tipo char, nel caso in cui le colonne char del server non siano riempite con caratteri nulli, tramite il driver JDBC viene aggiunto il riempimento. |
A lunghezza variabile |
I tipi di dati varchar e nvarchar di SQL Server sono mappati direttamente ai tipi VARCHAR e NVARCHAR di JDBC. |
Long |
I tipi text e ntext di SQL Server vengono mappati ai tipi LONGVARCHAR e LONGNVARCHAR di JDBC. Poiché si tratta di tipi obsoleti per SQL Server 2005 e SQL Server 2008, è necessario utilizzare i tipi per valori di grandi dimensioni varchar(max) o nvarchar(max). I metodi update<Numeric Type> e updateObject (int, java.lang.Object) non possono essere utilizzati sulle colonne del server text e ntext. L'utilizzo del metodo setObject con un tipo di conversione dei caratteri specificato è invece supportato sulle colonne del server text e ntext. |
Tipi di stringhe binarie
I tipi di stringa binaria di JDBC sono BINARY, VARBINARY e LONGVARBINARY.
Tipo | Descrizione |
---|---|
A lunghezza fissa |
Il tipo binary di SQL Server è mappato direttamente al tipo BINARY di JDBC. Si tratta di un tipo a lunghezza fissa con spaziatura messo a disposizione dal server nel caso in cui la colonna presenti SET ANSI_PADDING ON. La spaziatura viene aggiunta dal driver JDBC se mancante nelle colonne char del server. Il tipo timestamp di SQL Server è un tipo BINARY di JDBC con lunghezza fissa di 8 byte. |
A lunghezza variabile |
Il tipo varbinary di SQL Server è mappato al tipo VARBINARY di JDBC. Il tipo udt di SQL Server è mappato a JDBC come tipo VARBINARY. |
Long |
Il tipo image di SQL Server è mappato al tipo LONGVARBINARY di JDBC. Poiché si tratta di un tipo obsoleto per SQL Server 2005 e SQL Server 2008, è necessario utilizzare un tipo per valori di grandi dimensioni varbinary(max). |
Tipi di valori numerici esatti
I tipi di valori numerici esatti di JDBC sono mappati direttamente ai tipi corrispondenti di SQL Server.
Tipo | Descrizione |
---|---|
BIT |
Il tipo BIT di JDBC rappresenta un singolo bit che può essere 0 o 1 ed è mappato al tipo bit di SQL Server. |
TINYINT |
Il tipo TINYINT di JDBC rappresenta un singolo bit ed è mappato al tipo tinyint di SQL Server. |
SMALLINT |
Il tipo SMALLINT di JDBC rappresenta un valore intero a 16 bit con segno ed è mappato al tipo smallint di SQL Server. |
INTEGER |
Il tipo INTEGER di JDBC rappresenta un valore intero a 32 bit con segno ed è mappato al tipo int di SQL Server. |
BIGINT |
Il tipo BIGINT di JDBC rappresenta un valore intero a 64 bit con segno ed è mappato al tipo bigint di SQL Server. |
NUMERIC |
Il tipo NUMERIC di JDBC rappresenta un valore decimale a precisione fissa che include valori di precisione identica. Il tipo NUMERIC è mappato al tipo numeric di SQL Server. |
DECIMAL |
Il tipo DECIMAL di JDBC rappresenta un valore decimale a precisione fissa che include valori pari almeno alla precisione specificata. Il tipo DECIMAL è mappato al tipo decimal di SQL Server. Il tipo DECIMAL di JDBC è inoltre mappato ai tipi money e smallmoney di SQL Server, i quali sono specifici tipi decimali a precisione fissa archiviati, rispettivamente, in 8 e 4 byte. |
Tipi di valori numerici approssimati
I tipi numerici approssimati di JDBC sono REAL, DOUBLE e FLOAT.
Tipo | Descrizione |
---|---|
REAL |
Il tipo REAL di JDBC presenta sette cifre di precisione (precisione singola) ed è mappato direttamente al tipo real di SQL Server. |
DOUBLE |
Il tipo DOUBLE di JDBC presenta 15 cifre di precisione (precisione doppia) ed è mappato al tipo float di SQL Server. Il tipo FLOAT di JDBC è un sinonimo di DOUBLE. Per non creare confusione tra FLOAT e DOUBLE, è preferibile utilizzare il tipo DOUBLE. |
Tipi datetime
Il tipo TIMESTAMP di JDBC è mappato ai tipi datetime e smalldatetime di SQL Server. Il tipo datetime è archiviato in due valori interi a 4 byte. Il tipo smalldatetime include le stesse informazioni (data e ora), ma garantisce minore precisione ed è archiviato in due valori interi piccoli a 2 byte.
Nota
Il tipo timestamp di SQL Server è un tipo di stringa binaria a lunghezza fissa. Non è mappato ad alcun tipo di dati relativi alla data e all'ora di JDBC: DATE, TIME o TIMESTAMP.
Mapping personalizzato dei tipi
La funzionalità di mapping personalizzato dei tipi di JDBC, che utilizza le interfacce SQLData per i tipi avanzati di JDBC (UDT, Struct e così via), non è implementata nel driver JDBC.