Grundlegendes zu den Unterschieden von Datentypen

JDBC-Treiber herunterladen

Es gibt eine Reihe von Unterschieden zwischen den Java-Datentypen und den SQL Server-Datentypen. Microsoft JDBC-Treiber für SQL Server berücksichtigt diese Unterschiede durch verschiedenartige Konvertierungen.

Zeichentypen

Die JDBC-Datentypen für Zeichenfolgen sind CHAR, VARCHAR und LONGVARCHAR. Der JDBC-Treiber unterstützt die JDBC 4.0-API. In JDBC 4.0 kann es sich bei den JDBC-Datentypen für Zeichenfolgen auch um NCHAR, NVARCHAR and LONGNVARCHAR handeln. Diese neuen Zeichenfolgentypen verwalten die systemeigenen Java-Zeichentypen im Unicode-Format, sodass keine Konvertierung von ANSI nach Unicode und Unicode nach ANSI mehr erforderlich ist.

type BESCHREIBUNG
Feste Länge Die SQL Server-Datentypen char und nchar lassen sich direkt den JDBC-Datentypen CHAR bzw. NCHAR zuordnen. Diese Typen weisen eine feste Länge auf und werden vom Server mit Leerstellen aufgefüllt, wenn für die Spalte SET ANSI_PADDING ON festgelegt wurde. Die Auffüllung mit Leerstellen ist für nchar immer aktiviert. Bei char fügt der JDBC-Treiber die Leerstellen jedoch nur hinzu, wenn die char-Spalten des Servers nicht aufgefüllt wurden.
Variable Länge Die SQL Server-Datentypen varchar und nvarchar lassen sich direkt den JDBC-Datentypen VARCHAR bzw. NVARCHAR zuordnen.
Long Die SQL Server-Typen text und ntext lassen sich den JDBC-Typen LONGVARCHAR bzw. LONGNVARCHAR zuordnen. Diese Typen sind seit SQL Server 2005 (9.x) veraltet, daher sollten Sie stattdessen die Typen mit Unterstützung für umfangreiche Werte wie varchar(max) oder nvarchar(max) verwenden.

Bei Verwendung der Methoden <updateNumeric Type> und updateObject (int, java.lang.Object) treten bei text- und ntext-Serverspalten Fehler auf. Allerdings wird die Verwendung der Methode setObject mit Angabe eines Zeichenkonvertierungstyps für text- und ntext-Serverspalten unterstützt.

Binäre Zeichenfolgetypen

Die JDBC-Datentypen für Binärzeichenfolgen sind BINARY, VARBINARY und LONGVARBINARY.

type BESCHREIBUNG
Feste Länge Der SQL Server-Typ binary lässt sich direkt dem JDBC-Typ BINARY zuordnen. Dieser Typ weist eine feste Länge auf und wird vom Server mit Leerstellen aufgefüllt, wenn für die Spalte SET ANSI_PADDING ON eingestellt wurde. Wenn die Zeichenspalten des Servers nicht mit Leerstellen aufgefüllt sind, fügt der JDBC-Treiber die Leerstellen hinzu.

Bei dem SQL Server-Typ timestamp handelt es sich um einen JDBC-BINARY-Typ mit einer festen Länge von 8 Bytes.
Variable Länge Der SQL Server-Typ varbinary lässt sich dem JDBC-Typ VARBINARY zuordnen.

Der udt-Typ in SQL Server lässt sich in JDBC als VARBINARY-Typ zuordnen.
Long Der SQL Server-Typ image lässt sich dem JDBC-Typ LONGVARBINARY zuordnen. Da dieser Typ ab SQL Server 2005 (9.x) veraltet ist, sollten Sie stattdessen einen Typ mit umfangreichen Werten, d.h. varbinary(max) , verwenden.

Exakte numerische Typen

Die exakten numerischen JDBC-Typen sind direkt den entsprechenden SQL Server-Typen zugeordnet.

type BESCHREIBUNG
BIT Der JDBC-Typ BIT stellt ein Einzelbit dar, das 0 oder 1 sein kann. Dieser Typ lässt sich einem SQL Server-Typ bit zuordnen.
TINYINT Der JDBC-Typ TINYINT stellt ein einzelnes Byte dar. Dieser Typ lässt sich einem SQL Server-Typ tinyint zuordnen.
SMALLINT Der JDBC-Typ SMALLINT stellt eine 16-Bit-Ganzzahl mit Vorzeichen dar. Dieser Typ lässt sich einem SQL Server-Typ smallint zuordnen.
INTEGER Der JDBC-Typ INTEGER stellt eine 32-Bit-Ganzzahl mit Vorzeichen dar. Dieser Typ lässt sich einem SQL Server-Typ int zuordnen.
bigint Der JDBC-Typ BIGINT stellt eine 64-Bit-Ganzzahl mit Vorzeichen dar. Dieser Typ lässt sich einem SQL Server-Typ bigint zuordnen.
NUMERIC Der JDBC-Typ NUMERIC stellt einen Dezimalwert fester Genauigkeit dar, der Werte mit identischer Genauigkeit enthält. Der Typ NUMERIC lässt sich dem SQL Server-Typ numeric zuordnen.
DECIMAL Der JDBC-Typ DECIMAL stellt einen Dezimalwert fester Genauigkeit dar, der Werte mit mindestens der angegebenen Genauigkeit enthält. Der Typ DECIMAL lässt sich dem SQL Server-Typ decimal zuordnen.

Der JDBC-Typ DECIMAL lässt sich außerdem den SQL Server-Typen money und smallmoney zuordnen. Dabei handelt es sich um spezielle Dezimaltypen mit fester Genauigkeit, die in 8 bzw. 4 Bytes gespeichert werden.

Angenäherte numerische Typen

Die angenäherten numerischen JDBC-Typen lauten REAL, DOUBLE und FLOAT.

type BESCHREIBUNG
real Der JDBC-Typ REAL weist sieben Stellen für die Genauigkeit auf (einfache Genauigkeit) und lässt sich direkt dem SQL Server-Typ real zuordnen.
Double Der JDBC-Typ DOUBLE weist 15 Stellen für die Genauigkeit auf (doppelte Genauigkeit) und ist dem SQL Server-Typ float zugeordnet. Der JDBC-Typ FLOAT ist ein Synonym von DOUBLE. Um Verwechslungen zwischen FLOAT und DOUBLE zu vermeiden, sollte vorzugsweise DOUBLE verwendet werden.

Datum-/Zeittypen

Der JDBC-Typ TIMESTAMP lässt sich den SQL Server-Typen datetime und smalldatetime zuordnen. Der Typ datetime wird in zwei ganzzahligen Werten mit der Länge 4 Byte gespeichert. Der Typ smalldatetime enthält die gleichen Informationen (Datum und Uhrzeit), allerdings mit geringerer Genauigkeit in zwei Integer-Werten mit der Länge 2 Byte.

Hinweis

Der SQL Server-Typ timestamp ist ein Binärzeichenfolgentyp mit fester Länge. Er lässt sich keinem der time-Typen in JDBC zuordnen: DATE, TIME oder TIMESTAMP.

Benutzerdefinierte Typzuordnung

Die Zuordnungsfunktion für benutzerdefinierte Typen von JDBC, die die SQLData-Schnittstellen für die erweiterten JDBC-Typen (UDTs, Struct usw.) verwendet, ist im JDBC-Treiber nicht implementiert.

Weitere Informationen

Grundlegendes zu den Datentypen des JDBC-Treibers