SQL-Escapes
[Gesamtübersicht]...
[JDBC-API]
Dies ist eine kurze Exkursion in die SQL-Escape-Syntax.
Statement-Objekte können SQL-Anweisungen enthalten, die die SQL-Escape-Syntax
verwenden. Die SQL-Escape-Syntax signalisiert an den Treiber, daß
der enthaltene Code anders zu behandeln ist. Der Treiber sucht nach jeder
Escape-Syntax und diese wird dann in einen Code übersetzt, den die
jeweilige Datenbank versteht, hierdurch wird die Escape-Syntax unabhängig
vom DBMS.
Ein Escape-Konstrukt sieht wie folgt aus : {Schlüsselwort ...
Parameter ...}
Einige Schlüsselworte sind :
-
escape für LIKE-Escapezeichen ,hierbei ist gemeint, daß
man bei SQL-Anfragen mit LIKE null und mehr Zeichen durch ein Prozentzeichen
(%) und genau ein Zeichen durch einen Unterstrich (_) ersetzen kann, wenn
man nur weiß, daß das Wort mit B beginnt, dann setzt man B%
dafür ein, wenn man weiß das Wort beginnt mit B und hat 3 Buchstaben,
setzt man B_ _ . Wenn allerdings ein % oder _ am Anfang eines Wortes stehen
soll, so setzt man einen Schrägstrich (\) davor, da dann dieses Zeichen
wörtlich interpretiert wird.
-
fn steht für Skalarfunktionen, wobei der Aufruf ist {fn Funktionsname(parameter)}
Die Art der Funktionen, die ein DBMS unterstützt, bekommt man durch
die DataBaseMetaData Methoden heraus, so gibt getNumericFunctions eine
Liste von numerischen Funktionen und getStringFunctions eine Liste von
Zeichenkettenfunktionen aus. Dies sind nur zwei der Methoden, die die Funktionen
anzeigen.
-
d, t und s für Datums- und Zeitliterale, dies
ist wichtig, da sich die DBMS sich bezüglich der Datums und Zeitangabe
unterscheiden können. Die Escape-Syntax lautet hier : für Datum
{d ‘yyyy-mm-dd}, für Zeit {t ‘hh:mm:ss‘} und für Timestamps {ts
‘yyyy-mm-dd hh:mm:ss.f..} (hier können die Sekundenbruchteile f..
weggelassen werden). Ein Beispiel hierfür : der Treiber ersetzt {d
1998-05-04} durch ‘04-Mai-1998‘, wenn dies die DBMS spezifische Darstellung
ist
-
call oder ?=call für gespeicherte Prozeduren. Unterstützt
ein DBMS gespeicherte Funktionen, werden sie durch folgende Syntax aufgerufen
: {call Prozedurename[(parameters)]} oder bei einer Prozedur mit Ergebnisparameter
{?=call Prozedurename[(parameters)]}
-
oj für outer-join, also einem äußerem Verbund mit
folgender Syntax : table LEFT OUTER JOIN [table | outer-join] ON search-condition,
ob ein DBMS outer-joins unterstützt, erfährt man wiederum aus
den DatabaseMetaData
Mit Statement.setEscapeProcessing kann man die Verarbeitung von
Escape-Zeichen ein und aus schalten. Diese Funktion funktioniert nicht
bei PreparedStatement, da die Anweisung schon an die Datenbank gesendet
worden sein kann, bevor sie aufgerufen werden kann.
Autor: Jörn Hauswald
Last Updated on $Date: 1998/10/29 11:41:13 $