Verwenden von SQL-Escapesequenzen

JDBC-Treiber herunterladen

Der Microsoft JDBC-Treiber für SQL Server unterstützt die Verwendung von SQL-Escapesequenzen gemäß der Definition durch die JDBC-API. Escape-Sequenzen werden innerhalb einer SQL-Anweisung verwendet, um dem Treiber mitzuteilen, dass der mit Escape-Sequenzen versehene Teil der SQL-Zeichenfolge anders behandelt werden soll. Wenn der JDBC-Treiber den mit Escapezeichen versehenen Teil einer SQL-Zeichenfolge verarbeitet, übersetzt er diesen Teil der Zeichenfolge in SQL-Code, den SQL Server versteht.

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

  • Platzhalterliterale für LIKE
  • Funktionsverarbeitung
  • Datums- und Uhrzeitliterale
  • Aufrufe gespeicherter Prozeduren
  • Äußere Joins
  • Escape-Syntax begrenzen

Die vom JDBC-Treiber verwendete Syntax der Escape-Sequenzen lautet wie folgt:

{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.

Platzhalterliterale für LIKE

Der JDBC-Treiber unterstützt die {escape 'escape character'}-Syntax zur Verwendung von Platzhaltern der LIKE-Klausel als Literalzeichen. Beispielsweise gibt der folgende Code Werte für „col3“ zurück, wenn der Wert von „col2“ buchstäblich mit einem Unterstrich beginnt (und nicht mit seiner Verwendung als 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.

Funktionsverarbeitung

Der JDBC-Treiber unterstützt Escape-Sequenzen für Funktionen 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 Datums- und Uhrzeitfunktionen Systemfunktionen
ASCII

CHAR

CONCAT

UNTERSCHIED

INSERT

LCASE

LEFT

LÄNGE

Lokalisieren

LTRIM

WIEDERHOLEN

REPLACE

RECHTS

RTRIM

SOUNDEX

SPACE

SUBSTRING

UCASE
ABS

ACOS

ASIN

ATAN

ATAN2

OBERGRENZE

COS

COT

DEGREES

EXP

BODEN

LOG

LOG10

MOD

PI

POWER

RADIANS

RAND

RUND

Zeichen

SIN

SQRT

TAN

Kürzen
CURDATE

CURTIME

DAYNAME

DAYOFMONTH

WOCHENTAG

Tag des Jahres

Extrakt

STUNDE

MINUTE

MONAT

MONTHNAME

JETZT

QUARTAL

SEKUNDE

TIMESTAMPADD

TIMESTAMPDIFF

WOCHE

JAHR
DATABASE

IFNULL

USER

Hinweis

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

Datums- und Uhrzeitliterale

Die Escape-Syntax für Datums-, Zeit- und Zeitstempelliterale lautet wie folgt:

{literal-type 'value'}  

Hierbei ist literal-type einer der folgenden Typen:

Literaltyp BESCHREIBUNG Wertformat
d Datum yyyy-mm-dd
t Zeit 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 Escape-Sequenz für Outer Joins ist 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 Escape-Sequenzen 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

Escape-Syntax begrenzen

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 verpflichtenden Teil, indem er die Abfrage so umschreibt, dass TOP anstelle von LIMIT verwendet wird. 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.

Siehe auch

Verwenden von Statements mit dem JDBC-Treiber