Verwenden von SQL-Escapesequenzen
Microsoft SQL Server 2005 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