Verwenden von SQL-Escapesequenzen

JDBC-Treiber herunterladen

Microsoft JDBC-Treiber für SQL Server unterstützt die Verwendung von SQL-Escapesequenzen gemäß der Definition durch die JDBC-API. Mithilfe von Escapesequenzen wird in einer SQL-Anweisung für den Treiber angegeben, dass der Teil der SQL-Zeichenfolge mit Escapezeichen anders behandelt werden soll. Wenn der JDBC-Treiber den Teil einer SQL-Anweisung mit Escapezeichen verarbeitet, wird dieser Teil der Zeichenfolge in SQL-Code übersetzt, den SQL Server verwenden kann.

Es gibt fünf Arten von Escapesequenzen, die für die JDBC-API erforderlich sind. Alle werden vom JDBC-Treiber unterstützt:

  • LIKE-Platzhalterliterale
  • Funktionsbehandlung
  • Datums- und Zeitliterale
  • Aufrufe gespeicherter Prozeduren
  • Äußere Joins
  • LIMIT-Escapesyntax

JDBC-Treiber verwendet die folgende Escapesequenzsyntax:

{keyword ...parameters...}

Hinweis

Die SQL-Escapeverarbeitung ist für den JDBC-Treiber immer aktiviert.

In den folgenden Abschnitten werden die fünf Arten von Escapesequenzen und ihre Unterstützung durch den JDBC-Treiber beschrieben.

LIKE-Platzhalterliterale

Der JDBC-Treiber unterstützt die {escape 'escape character'}-Syntax zum Verwenden von LIKE-Klauselplatzhaltern als Literale. Der folgende Code gibt beispielsweise Werte für „col3“ zurück, wenn der Wert von „col2“ wirklich mit einem Unterstrich beginnt (und nicht mit dem Platzhalter).

ResultSet rst = stmt.executeQuery("SELECT col3 FROM test1 WHERE col2   
LIKE '\\_%' {escape '\\'}");  

Hinweis

Die Escapesequenz muss sich am Ende der SQL-Anweisung befinden. Bei mehreren SQL-Anweisungen in einer Befehlszeichenfolge muss sich die Escapesequenz am Ende jeder relevanten SQL-Anweisung befinden.

Funktionsbehandlung

Der JDBC-Treiber unterstützt Funktionsescapesequenzen in SQL-Anweisungen mit der folgenden Syntax:

{fn functionName}  

Dabei ist functionName eine vom JDBC-Treiber unterstützte Funktion. Beispiel:

SELECT {fn UCASE(Name)} FROM Employee  

In der folgenden Tabelle werden die unterschiedlichen Funktionen aufgeführt, die der JDBC-Treiber bei der Verwendung einer Funktionsescapesequenz unterstützt.

Zeichenfolgenfunktionen Numerische Funktionen datetime-Funktionen Systemfunktionen
ASCII

CHAR

CONCAT

DIFFERENCE

INSERT

LCASE

LEFT

LENGTH

LOCATE

LTRIM

REPEAT

REPLACE

RIGHT

RTRIM

SOUNDEX

SPACE

SUBSTRING

UCASE
ABS (ABS)

ACOS

ASIN

ATAN

ATAN2

CEILING

COS

COT

DEGREES

EXP

FLOOR

PROTOKOLL

LOG10

MOD

PI

POWER

RADIANS

RAND

ROUND

SIGN

SIN

SQRT

TAN

TRUNCATE
CURDATE

CURTIME

DAYNAME

DAYOFMONTH

TAGDERWOCHE

TAGDESJAHRES

EXTRACT

HOUR

MINUTE

MONTH

MONTHNAME

NOW

QUARTER

SECOND

TIMESTAMPADD

TIMESTAMPDIFF

WEEK

YEAR
DATABASE

IFNULL

USER

Hinweis

Wenn Sie versuchen, eine von der Datenbank nicht unterstützte Funktion zu verwenden, tritt ein Fehler auf.

Datums- und Zeitliterale

Die Escapesyntax für Datums-, Zeit- und Timestampliterale lautet wie folgt:

{literal-type 'value'}  

Hierbei ist literal-type einer der folgenden Typen:

Literaltyp BESCHREIBUNG Wertformat
d Date yyyy-mm-dd
t Time hh:mm:ss [1]
ts TimeStamp yyyy-mm-dd hh:mm:ss[.f...]

Beispiel:

UPDATE Orders SET OpenDate={d '2005-01-31'}
WHERE OrderID=1025  

Aufrufe gespeicherter Prozeduren

Der JDBC-Treiber unterstützt die {? = call proc_name(?,...)}- und die {call proc_name(?,...)}-Escapesyntax für Aufrufe gespeicherter Prozeduren, je nachdem, ob ein Rückgabeparameter verarbeitet werden muss.

Bei einer Prozedur handelt es sich um ein in der Datenbank gespeichertes, ausführbares Objekt. In der Regel handelt es sich dabei um eine oder mehrere vorkompilierte SQL-Anweisungen. Die Escapesequenzsyntax zum Aufrufen einer gespeicherten Prozedur lautet wie folgt:

{[?=]call procedure-name[([parameter][,[parameter]]...)]}  

Dabei gibt procedure-name den Namen einer gespeicherten Prozedur an, und parameter gibt einen Parameter für eine gespeicherte Prozedur an.

Weitere Informationen zur Verwendung der Escapesequenz call mit gespeicherten Prozeduren finden Sie unter Verwenden von Anweisungen mit gespeicherten Prozeduren.

Äußere Joins

Der JDBC-Treiber unterstützt die linke, rechte und vollständige äußere SQL92-Joinsyntax. Die Escapesequenz für äußere Joins lautet wie folgt:

{oj outer-join}  

Dabei lautet der äußere Join:

table-reference {LEFT | RIGHT | FULL} OUTER JOIN
{table-reference | outer-join} ON search-condition  

Dabei ist table-reference ein Tabellenname, und search-condition ist die Joinbedingung, die für die Tabellen verwendet werden soll.

Beispiel:

SELECT Customers.CustID, Customers.Name, Orders.OrderID, Orders.Status
   FROM {oj Customers LEFT OUTER JOIN
      Orders ON Customers.CustID=Orders.CustID}
   WHERE Orders.Status='OPEN'  

Die folgenden Escapesequenzen für äußere Joins werden vom JDBC-Treiber unterstützt:

  • Linke äußere Joins
  • Rechte äußere Joins
  • Vollständige äußere Joins
  • Geschachtelte äußere Joins

LIMIT-Escapesyntax

Hinweis

Die LIMIT-Escapesyntax wird nur bei Verwendung von JDBC 4.1 oder höher vom Microsoft JDBC-Treiber 4.2 (oder höher) für SQL Server unterstützt.

Die Escapesyntax für LIMIT ist wie folgt:

LIMIT <rows> [OFFSET <row offset>]  

Die Escapesyntax besteht aus zwei Teilen: <rows> ist obligatorisch und gibt die Anzahl der zurückzugebenden Zeilen an. OFFSET und <row offset> sind optional und geben die Anzahl der zu überspringenden Zeilen an, bevor mit der Rückgabe von Zeilen begonnen wird. Der JDBC-Treiber unterstützt nur den obligatorischen Teil, indem er die Abfrageklausel von LIMIT in TOP umwandelt. SQL Server unterstützt die LIMIT-Klausel nicht. Der JDBC-Treiber unterstützt den optionalen Parameter <row offset> nicht, und der Treiber löst eine Ausnahme aus, wenn dieser Parameter verwendet wird.

Weitere Informationen

Verwenden von Anweisungen mit dem JDBC-Treiber