Verwenden von Standarddatentypen

Microsoft SQL Server JDBC Driver verwendet die JDBC-Standarddatentypen für die Konvertierung der SQL Server-Datentypen in ein Format, das von der Programmiersprache Java verarbeitet werden kann, und umgekehrt.

Ab Version 2.0 von Microsoft SQL Server JDBC Driver unterstützt der JDBC-Treiber die JDBC 4.0-API, die den SQLXML-Datentyp und nationale (Unicode-)Datentypen wie NCHAR, NVARCHAR, LONGNVARCHAR und NCLOB enthält.

Die folgende Tabelle enthält eine Liste der Standardzuordnungen zwischen den SQL Server-Standarddatentypen sowie den JDBC- und Java-Datentypen:

SQL Server-Typen JDBC-Typen (java.sql.Types) Java-Typen

bigint

BIGINT

long

timestamp

binary

BINARY

byte[]

bit

BIT

boolean

char

CHAR

String

decimal

money

smallmoney

DECIMAL

java.math.BigDecimal

float

DOUBLE

double

int

INTEGER

int

image

varbinary(max)

LONGVARBINARY

byte[]

varchar(max)

text

LONGVARCHAR

String

nchar

CHAR

NCHAR (Java SE 6.0)

String

nvarchar

VARCHAR

NVARCHAR (Java SE 6.0)

String

nvarchar(max)

ntext

LONGVARCHAR

LONGNVARCHAR (Java SE 6.0)

String

numeric

NUMERIC

java.math.BigDecimal

real

REAL

float

smallint

SMALLINT

short

datetime

smalldatetime

TIMESTAMP

java.sql.Timestamp

varbinary

udt

VARBINARY

byte[]

varchar

VARCHAR

String

tinyint

TINYINT

short

uniqueidentifier

CHAR

String

xml

LONGVARCHAR

SQLXML (Java SE 6.0)

String

SQLXML

Hinweis

Der SQL Server-Datentyp "sqlvariant" wird vom JDBC-Treiber zurzeit nicht unterstützt. Wenn Daten mit einer Abfrage aus einer Tabelle mit einer Spalte abgerufen werden, die den sqlvariant-Datentyp enthält, wird eine Ausnahme ausgegeben.

Die folgenden Abschnitte enthalten Beispiele für die Verwendung des JDBC-Treibers und der Standarddatentypen. Ein ausführlicheres Beispiel für die Verwendung der Standarddatentypen in einer Java-Anwendung finden Sie unter Standarddatentypen - Beispiel.

Abrufen von Daten als Zeichenfolge

Wenn Sie Daten von einer Datenquelle abrufen müssen, die einem der JDBC-Standarddatentypen entspricht und als Zeichenfolge angezeigt werden soll, oder stark typisierte Daten nicht erforderlich sind, können Sie die getString-Methode der SQLServerResultSet-Klasse verwenden, wie z. B.:

String SQL = "SELECT TOP 10 * FROM Person.Contact";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(SQL);

while (rs.next()) {
   System.out.println(rs.getString(4) + " " + rs.getString(6));
}
rs.close();
stmt.close();

Abrufen von Daten nach Datentyp

Wenn Sie Daten von einer Datenquelle abrufen müssen und den Typ der abgerufenen Daten kennen, sollten Sie eine der get<Type>-Methoden der SQLServerResultSet-Klasse, die so genannten Abrufmethoden, verwenden. Sie können bei den get<Type>-Methoden einen Spaltennamen oder einen Spaltenindex verwenden, wie im Folgenden dargestellt:

ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee
   WHERE (lname = 'Brown')");
rs.next();
short empJobID = rs.getShort("job_id");
rs.close();
stmt.close();

Hinweis

Die Methoden getUnicodeStream und getBigDecimal mit Skalierung sind veraltet und werden vom JDBC-Treiber nicht unterstützt.

Aktualisieren von Daten nach Datentyp

Wenn Sie den Wert eines Felds in einer Datenquelle aktualisieren müssen, sollten Sie eine der update<Type>-Methoden der SQLServerResultSet-Klasse verwenden. Im folgenden Beispiel wird die updateInt-Methode zusammen mit der updateRow-Methode verwendet, um die Daten in der Datenquelle zu aktualisieren:

Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 
ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee
   WHERE (lname = 'Brown')");
rs.next();
short empJobID = rs.getInt(2);
empJobID++;
rs.first();
rs.updateInt(2, empJobID);
rs.updateRow();
rs.close();
stmt.close();

Hinweis

Der JDBC-Treiber kann keine SQL Server-Spalte mit einem Spaltennamen aktualisieren, dessen Länge mehr als 127 Zeichen beträgt. Wenn ein Update einer Spalte, deren Name mehr als 127 Zeichen umfasst, ausgeführt werden soll, wird eine Ausnahme ausgegeben.

Aktualisieren von Daten durch parametrisierte Abfragen

Wenn Sie Daten in einer Datenquelle durch eine parametrisierte Abfrage aktualisieren müssen, können Sie den Datentyp der Parameter mit einer der set<Type>-Methoden der SQLServerPreparedStatement-Klasse, den so genannten Festlegungsmethoden, festlegen. Im folgenden Beispiel werden die parametrisierte Abfrage mit der prepareStatement-Methode vorkompiliert und dann der string-Wert des Parameters vor dem Aufrufen der executeUpdate-Methode mit der setString-Methode festgelegt.

PreparedStatement pstmt = con.prepareStatement("UPDATE employee SET
   fname = ? WHERE (lname = 'Brown')");
String first = "Bob";
pstmt.setString(1, first);
int rowCount = pstmt.executeUpdate();
pstmt.close();

Weitere Informationen zu parametrisierten Abfragen finden Sie unter Verwenden von SQL-Anweisungen mit Parametern.

Übergeben von Parametern an gespeicherte Prozeduren

Wenn Sie typisierte Parameter an eine gespeicherte Prozedur übergeben müssen, können Sie die Parameter mit einer der set<Type>-Methoden der SQLServerCallableStatement-Klasse anhand eines Namens oder eines Index festlegen. Im folgenden Beispiel werden der Aufruf der gespeicherten Prozedur mit der prepareCall-Methode eingerichtet und dann die Parameter für den Aufruf vor dem Aufrufen der executeQuery-Methode mit der setString-Methode festgelegt.

CallableStatement cstmt = con.prepareCall("{call employee_jobid(?)}");
String lname = "Brown";
cstmt.setString(1, lname);
Resultset rs = cstmt.executeQuery();
rs.close();
cstmt.close();

Hinweis

In diesem Beispiel wird ein Resultset zurückgegeben, das die Ergebnisse der gespeicherten Prozedur enthält.

Weitere Informationen zum Verwenden des JDBC-Treibers mit gespeicherten Prozeduren und Eingabeparametern finden Sie unter Verwenden von gespeicherten Prozeduren mit Eingabeparametern.

Abrufen von Parametern von gespeicherten Prozeduren

Wenn Sie Parameter wieder von einer gespeicherten Prozedur abrufen müssen, müssen Sie zuerst mit der registerOutParameter-Methode der SQLServerCallableStatement-Klasse anhand Name oder Index einen out-Parameter registrieren und den zurückgegebenen out-Parameter nach dem Aufruf der gespeicherten Prozedur einer geeigneten Variablen zuordnen. Im folgenden Beispiel werden der Aufruf der gespeicherten Prozedur mit der prepareCall-Methode eingerichtet, der out-Parameter mit der registerOutParameter-Methode eingerichtet und dann die Parameter für den Aufruf vor dem Aufrufen der executeQuery-Methode mit der setString-Methode festgelegt. Der vom out-Parameter der gespeicherten Prozedur zurückgegebene Wert wird mit der getShort-Methode abgerufen.

CallableStatement cstmt = con.prepareCall("{call employee_jobid (?, ?)}");
cstmt.registerOutParameter(2, java.sql.Types.SMALLINT);
String lname = "Brown";
cstmt.setString(1, lname);
Resultset rs = cstmt.executeQuery();
short empJobID = cstmt.getShort(2);
rs.close();
cstmt.close();

Hinweis

Zusätzlich zum zurückgegebenen out-Parameter kann auch ein Resultset zurückgegeben werden, das die Ergebnisse der gespeicherten Prozedur enthält.

Weitere Informationen zum Verwenden des JDBC-Treibers mit gespeicherten Prozeduren und Ausgabeparametern finden Sie unter Verwenden von gespeicherten Prozeduren mit Ausgabeparametern.

Siehe auch

Andere Ressourcen

Grundlegendes zu den Datentypen in JDBC Driver