Grundlegendes zu Datentypkonvertierungen

Um eine Konvertierung der Datentypen der Programmiersprache Java in SQL Server-Datentypen zu ermöglichen, stellt Microsoft SQL Server 2005 JDBC Driver die erforderlichen Datentypkonvertierungen gemäß JDBC-Spezifikation bereit. Alle Typen können in die und aus den Datentypen Object, String und byte[] konvertiert werden, um mehr Flexibilität bereitzustellen.

Konvertierungen für Abrufmethoden

Das folgende Diagramm enthält basierend auf den SQL Server 2005-Datentypen das Konvertierungsschema des JDBC-Treibers für die get<Type>-Methoden der SQLServerResultSet-Klasse und die unterstützten Konvertierungen für die get<Type>-Methoden der SQLServerCallableStatement-Klasse.

JDBCGetterConversions

Von den Abrufmethoden des JDBC-Treibers werden drei grundlegende Konvertierungskategorien unterstützt:

  • Non-Lossy (x): Konvertierungen für Fälle, bei denen der Abruftyp gleich oder kleiner als der zugrunde liegende Servertyp ist. Beim Aufruf von getBigDecimal für eine zugrunde liegende dezimale Serverspalte ist beispielsweise keine Konvertierung erforderlich.

  • Converted (y): Konvertierungen von numerischen Servertypen in Java-Typen, bei denen die Konvertierung den Konvertierungsregeln von Java entsprechend erfolgt. Bei diesen Konvertierungen wird die Genauigkeit gekürzt (niemals gerundet), und der Überlauf wird als Modulo des Zieltyps behandelt, der kleiner ist. Beim Aufruf von getInt für eine zugrunde liegende decimal-Spalte mit dem Wert "1,9999" wird der Wert "1" zurückgegeben. Beim zugrunde liegenden decimal-Wert "3000000000" beträgt der Überlauf des int-Werts "-1294967296".

  • Data Dependent (z): Bei Konvertierungen von zugrunde liegenden Datentypen in numerische Typen müssen die Zeichentypen Werte enthalten, die in den betreffenden Typ konvertiert werden können. Andere Konvertierungen werden nicht ausgeführt. Werte, die für den Abruftyp zu groß sind, sind ungültig. Beim Aufruf von getInt für eine varchar(50)-Spalte, die "53" enthält, wird beispielsweise der Wert als int zurückgegeben. Bei einem zugrunde liegenden Wert von "xyz" oder "3000000000" wird ein Fehler ausgegeben.

Konvertierungen für Festlegungsmethoden

Für die Java-Typdaten, die an die update<Type>-Methoden der SQLServerResultSet-Klasse und die setObject<Type>-Methoden der SQLServerPreparedStatement-Klasse übergeben werden, gelten die folgenden Konvertierungen.

JDBCSetterConversions

Die setObject-Methode ohne Angabe eines Zieltyps verwendet die Standardzuordnung. Die typisierten Festlegungsmethoden für Parameter, die set<Type>-Methoden der SQLServerPreparedStatement-Klasse und die set<Type>-Methoden der SQLServerCallableStatement-Klasse verwenden ebenfalls die Java/JDBC-Standardtypzuordnung und übergeben diesen Typ an den Server. Der Server führt alle Konvertierungen aus und gibt bei Fehlern eine Fehlermeldung zurück.

Wenn der Wert eines String-Datentyps die Länge von VARCHAR überschreitet, wird er LONGVARCHAR zugeordnet. Gleiches gilt für byte[]. Werte, die länger sind als VARBINARY, werden in LONGVARBINARY konvertiert.

Von den Festlegungsmethoden des JDBC-Treibers werden zwei grundlegende Konvertierungskategorien unterstützt:

  • Non-Lossy (x): Konvertierungen für numerische Fälle, bei denen der Festlegungstyp gleich oder kleiner als der zugrunde liegende Servertyp ist. Beim Aufruf von setBigDecimal für eine zugrunde liegende decimal-Serverspalte ist beispielsweise keine Konvertierung erforderlich. Bei der Umwandlung von numerischen Typen in Zeichentypen wird der Java-Datentyp numeric in String konvertiert. Beim Aufruf von setDouble für eine varchar(50)-Spalte mit dem Wert "53" wird beispielsweise in der betreffenden Zielspalte der Zeichenwert "53" erzeugt.

  • Converted (y): Konvertierungen eines numeric-Java-Typs in einen zugrunde liegenden numeric-Servertyp, der kleiner ist. Diese Konvertierung ist regulär und erfolgt den SQL Server-Konvertierungskonventionen entsprechend. Die Genauigkeit wird immer gekürzt (niemals gerundet). Bei einem Überlauf wird der Fehler ausgegeben, dass die Konvertierung nicht unterstützt wird. Beispielsweise führt updateDecimal mit einem Wert von "1,9999" für eine zugrunde liegende integer-Spalte zu einer "1" in der Zielspalte. Bei der Übergabe von "3000000000" gibt der Treiber einen Fehler aus.

SQL Server führt den Großteil der Festlegungs- und Aktualisierungskonvertierungen aus und gibt bei Problemen Fehler an den JDBC-Treiber zurück. Clientseitige Konvertierungen sind die Ausnahme und werden nur bei date-, time-, timestamp-, Boolean und String-Werten ausgeführt.

Bei updateObject und setObject suchen die Methoden den Typ des übergebenen Objekts und rufen die Festlegungsmethode für den entsprechenden Typ auf.

Siehe auch

Andere Ressourcen

Grundlegendes zu den Datentypen in JDBC Driver