Grundlegendes zu den Unterschieden von Datentypen

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

Zeichentypen

Die JDBC-Datentypen für Zeichenfolgen lauten CHAR, VARCHAR und LONGVARCHAR. Ab Version 2.0 von Microsoft SQL Server JDBC Driver unterstützt der JDBC-Treiber die JDBC 4.0-API. In JDBC 4.0 sind auch NCHAR, NVARCHAR und LONGNVARCHAR als JDBC-Zeichenfolgentypen möglich. 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.

Typ Beschreibung

Feste Länge

Die SQL Server-Datentypen char und nchar entsprechen direkt den JDBC-Typen CHAR und NCHAR. 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-Typen varchar und nvarchar entsprechen direkt den JDBC-Typen VARCHAR bzw. NVARCHAR.

Long

Die SQL Server-Typen text und ntext entsprechen direkt den JDBC-Typen LONGVARCHAR bzw. LONGNVARCHAR. Diese Typen sind in SQL Server 2005 und SQL Server 2008 veraltet, sodass Sie stattdessen die Typen mit umfangreichen Werten varchar(max) oder nvarchar(max) verwenden sollten.

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

Binäre Zeichenfolgetypen

Die binären JDBC-Zeichenfolgentypen lauten BINARY, VARBINARY und LONGVARBINARY.

Typ Beschreibung

Feste Länge

Der SQL Server-Typ binary entspricht direkt dem JDBC-Typ BINARY. 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 entspricht dem JDBC-Typ VARBINARY.

Der udt-Typ in SQL Server entspricht dem VARBINARY-Typ in JDBC.

Long

Der SQL Server-Typ image entspricht dem JDBC-Typ LONGVARBINARY. Dieser Typ ist in SQL Server 2005 und SQL Server 2008 veraltet, sodass Sie stattdessen einen Typ mit umfangreichen Werten, d. h. varbinary(max), verwenden sollten.

Exakte numerische Typen

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

Typ Beschreibung

BIT

Der JDBC-Typ BIT stellt ein Bit dar, das 0 oder 1 sein kann. Entspricht dem SQL Server-Typ bit.

TINYINT

Der JDBC-Typ TINYINT stellt ein einzelnes Byte dar. Entspricht dem SQL Server-Typ tinyint.

SMALLINT

Der JDBC-Typ SMALLINT stellt eine 16-Bit-Ganzzahl mit Vorzeichen dar. Entspricht dem SQL Server-Typ smallint.

INTEGER

Der JDBC-Typ INTEGER stellt eine 32-Bit-Ganzzahl mit Vorzeichen dar. Entspricht dem SQL Server-Typ int.

BIGINT

Der JDBC-Typ BIGINT stellt eine 64-Bit-Ganzzahl mit Vorzeichen dar. Entspricht dem SQL Server-Typ bigint.

NUMERIC

Der JDBC-Typ NUMERIC stellt einen Dezimalwert fester Genauigkeit dar, der Werte mit identischer Genauigkeit enthält. Der NUMERIC-Typ entspricht dem SQL Server-Typ numeric.

DECIMAL

Der JDBC-Typ DECIMAL stellt einen Dezimalwert fester Genauigkeit dar, der Werte mit mindestens der angegebenen Genauigkeit enthält. Der DECIMAL-Typ ist dem SQL Server-Typ decimal zugeordnet.

Der JDBC-Typ DECIMAL entspricht außerdem den SQL Server-Typen money und smallmoney. Dabei handelt es sich um spezielle Dezimaltypen 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.

Typ Beschreibung

REAL

Der JDBC-Typ REAL weist sieben Ziffern für die Genauigkeit auf (einfache Genauigkeit) und entspricht dem SQL Server-Typ real.

DOUBLE

Der JDBC-Typ DOUBLE weist 15 Ziffern für die Genauigkeit auf (doppelte Genauigkeit) und entspricht dem SQL Server-Typ float. Bei dem JDBC-Typ FLOAT handelt es sich um ein Synonym für DOUBLE. Um Verwechslungen zwischen FLOAT und DOUBLE zu vermeiden, sollte vorzugsweise DOUBLE verwendet werden.

Datum-/Zeittypen

Der JDBC-Typ TIMESTAMP entspricht den SQL Server-Typen datetime und smalldatetime. Der datetime-Typ wird in zwei integer-Werten mit einer Länge von 4 Byte gespeichert. Der smalldatetime-Typ enthält die gleichen Informationen (Datum und Uhrzeit), allerdings mit geringerer Genauigkeit in zwei integer-Werten mit einer Länge von 2 Byte.

Hinweis

Bei dem SQL Server-Typ timestamp handelt es sich um einen binären Zeichenfolgetyp mit fester Länge. Er entspricht keinem der JDBC-Typen DATE, TIME oder TIMESTAMP.

Benutzerdefinierte Typzuordnung

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

Siehe auch

Andere Ressourcen

Grundlegendes zu den Datentypen in JDBC Driver