Verwenden von SQL-Escapesequenzen

Microsoft SQL Server JDBC Driver unterstützt die Verwendung von SQL-Escapesequenzen, wie von der JDBC-API definiert. 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 Verknüpfungen

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

ACOS

ASIN

ATAN

ATAN2

CEILING

COS

COT

DEGREES

EXP

FLOOR

LOG

LOG10

MOD

PI

POWER

RADIANS

RAND

ROUND

SIGN

SIN

SQRT

TAN

TRUNCATE

CURDATE

CURTIME

DAYNAME

DAYOFMONTH

DAYOFWEEK

DAYOFYEAR

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'}

Dabei 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(?,...)}-Escapesyntax und die {call proc_name(?,...)}-Escapesyntax für Aufrufe gespeicherter Prozeduren, abhängig davon, 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 zum Verwenden der call-Escapesequenz mit gespeicherten Prozeduren finden Sie unter Verwenden von Anweisungen mit gespeicherten Prozeduren.

Äußere Verknüpfungen

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

{oj outer-join}

Dabei lautet die äußere Verknüpfung:

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 Verknüpfungsbedingung, 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 Verknüpfungen werden vom JDBC-Treiber unterstützt:

  • Linke äußere Verknüpfungen

  • Rechte äußere Verknüpfungen

  • Vollständige äußere Verknüpfungen

  • Geschachtelte äußere Verknüpfungen

Siehe auch

Andere Ressourcen

Verwenden von Anweisungen mit dem JDBC-Treiber