English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Während des LernensJDBC-AnweisungWährend wir ein Kapitel studierten, haben wir gelernt, wie man in JDBC Speicherprozeduren verwendet. Dieses Kapitel ist ähnlich wie das vorherige, aber es bietet Ihnen mehr Informationen über JDBC SQL-Flucht-Syntax.
Wie der Connection-Objekt Statement- und PreparedStatement-Objekte erstellt, erstellt es auch ein CallableStatement-Objekt, das zur Ausführung von Aufrufen auf Datenbank-Speicherprozeduren verwendet wird.
Angenommen, Sie müssen den folgenden Oracle-Speicherprozess ausführen-
CREATE OR REPLACE PROCEDURE getEmpName (EMP_ID IN NUMBER, EMP_FIRST OUT VARCHAR) AS BEGIN SELECT first INTO EMP_FIRST FROM Employees WHERE ID = EMP_ID; END;
HINWEIS: Die obige gespeicherte Prozedur wurde für Oracle geschrieben, aber wir verwenden derzeit eine MySQL-Datenbank, daher schreiben wir eine gleiche gespeicherte Prozedur für MySQL, wie folgt, um sie im EMP-Datenbank zu erstellen-
DELIMITER $$ DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$ CREATE PROCEDURE `EMP`.`getEmpName` (IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255)) BEGIN SELECT first INTO EMP_FIRST FROM Employees WHERE ID = EMP_ID; END $$ DELIMITER ;
Es gibt drei Arten von Parametern: IN, OUT und INOUT. PreparedStatement-Objekte verwenden nur IN-Parameter. CallableStatement-Objekte können alle drei verwenden.
Das ist die Definition jedes.-
Bereich | Beschreibung |
---|---|
IN | Parameter, deren Wert bei der Erstellung der SQL-Anweisung unbekannt ist. Verwenden Sie die setXXX()-Methode, um Werte an die IN-Parameter zu binden. |
OUT | Sein Wert wird von den Parametern bereitgestellt, die von der zurückgegebenen SQL-Anweisung. Verwenden Sie die getXXX()-Methode, um Werte aus den OUT-Parametern abzurufen. |
INOUT | Bieten Sie Parameter sowohl für Eingabe- als auch für Ausgabewerte an. Variablen können mit setXXX()-Methoden gebunden und mit getXXX()-Methoden Werte abgerufen werden. |
Der folgende Codeabschnitt zeigt, wie Sie das Objekt mit dieser Methode basierend auf dem vorangegangenen Speicherprozess instanziieren.-Connection.prepareCall()CallableStatement
CallableStatement cstmt = null; try { String SQL = "{call getEmpName (?, ?)}"; cstmt = conn.prepareCall(SQL); . . . } catch (SQLException e) { . . . } finally { . . . }
Der String-Variable SQL wird ein Speicherprozess mit Platzhaltern für Parameter zugeordnet.
Die Verwendung des CallableStatement-Objekts ist sehr ähnlich wie die Verwendung des PreparedStatement-Objekts. Sie müssen alle Werte vor der Ausführung des Statements an die Parameter binden,否则 Sie erhalten eine SQLException.
Bei IN-Parametern müssen Sie die gleichen Regeln und Techniken befolgen, die für PreparedStatement-Objekte gelten; verwenden Sie die setXXX()-Methoden, die dem gebundenen Java-Datentyp entsprechen.
Bei der Verwendung von OUT- und INOUT-Parametern müssen Sie die zusätzlichen CallableStatement-Methode registerOutParameter() verwenden. Die Methode registerOutParameter() bindet den JDBC-Datentyp an den erwarteten Datentyp der zurückgegebenen Daten des Speicherprozesses.
Nach dem Aufruf des Speicherprozesses können Sie die Werte aus den OUT-Parametern mit den geeigneten getXXX()-Methoden abrufen. Diese Methode konvertiert die vom SQL-Typ erhaltene Werte in Java-Datentypen.
Wie bei der Schließung anderer Statement-Objekte auch, sollten Sie aus denselben Gründen das CallableStatement-Objekt schließen.
Einfach den close()-Methodaufruf verwenden. Wenn Sie zunächst das Connection-Objekt schließen, wird auch das CallableStatement-Objekt geschlossen. Sie sollten jedoch immer das CallableStatement-Objekt explizit schließen, um sicherzustellen, dass eine korrekte Bereinigung erfolgt.
CallableStatement cstmt = null; try { String SQL = "{call getEmpName (?, ?)}"; cstmt = conn.prepareCall(SQL); . . . } catch (SQLException e) { . . . } finally { cstmt.close(); }
Untersuchen wir, was wir inIn den beziehbaren Beispielcodeshat mehr Details untersucht.
Die Escape-Syntax ermöglicht es Ihnen, Datenbank-spezifische Eigenschaften zu verwenden, die von den Standard JDBC-Methoden und -Eigenschaften nicht unterstützt werden.
Das allgemeine Format der SQL-Escape-Grammatik ist wie folgt-
{keyword 'parameter'}
Hier sind die folgenden Escape-Sequenzen, die Sie bei der Ausführung von JDBC-Programmierung sehr nützlich finden werden-
Sie können ihnen helfen, Texte von Datum, Zeit und Zeitstempel zu identifizieren. Wie Sie wissen, werden Zeit und Datum von keinem dbms auf die gleiche Weise dargestellt. Diese Escape-Grammatik teilt dem Treiber mit, das Datum oder die Zeit in der Form des Ziel-Datenbankformates darzustellen. Zum Beispiel:
{d 'yyyy-mm-dd'}
wobei yyyy = Jahr, mm = Monat; dd = Tag. Diese Grammatik {d'2009-09-03}' ist2009Jahr3Monat9Tag.
Dies ist ein einfaches Beispiel, das zeigt, wie man Daten in eine Tabelle einfügt-
//Erstellen Sie ein Statement-Objekt stmt = conn.createStatement(); //Insert data ==> ID, First Name, Last Name, DOB String sql="INSERT INTO STUDENTS VALUES" + "(100,'Zara','Ali', {d '2001-12-16'})"; stmt.executeUpdate(sql);
Genauso können Sie eine der folgenden beiden Grammatiken verwenden,toderts:
{t 'hh:mm:ss'}
wobei hh = Stunde; mm = Minute; ss = Sekunde. Diese Grammatik {t '13:30:29}' ist1:30:29 PM.
{ts 'yyyy-mm-dd hh:mm:ss
Dies ist die Kombinationsgrammatik der oben genannten beiden Grammatiken, wobei 'd' und 't' Zeitstempel darstellen.
Dieser Schlüsselwortbezeichner kennzeichnet den Escape-Zeichen, das im LIKE-Ausdruck verwendet wird. Es ist sehr nützlich, wenn der SQL-Wildcard-Zeichen % verwendet wird, der Null oder mehrere Zeichen matcht. Zum Beispiel:
String sql = "SELECT symbol FROM MathSymbols" WHERE symbol LIKE '\%' {escape '\'}"; stmt.execute(sql);
Wenn der Backslash-Zeichen () als Fluchtwort verwendet wird, müssen auch zwei Backslash-Zeichen in Java String-Literal verwendet werden, da der Backslash auch ein Java-Fluchtwort ist.
Dieser Schlüsselwort stellt die skalare Funktion in der DBMS dar. Zum Beispiel können Sie SQL-Funktionen verwendenlengthum die Länge eines Strings zu erhalten-
{fn length('Hello World')}
Dies wird zurückgeben11d.h. die Länge des Strings "Hello World".
Dieser Schlüsselwort wird verwendet, um Speichervorgänge aufzurufen. Zum Beispiel, für Speichervorgänge, die IN-Parameter benötigen, verwenden Sie die folgende Syntax-
{call my_procedure(?)};
Für Speichervorgänge, die IN-Parameter benötigen und OUT-Parameter zurückgeben, verwenden Sie die folgende Syntax-
{? = call my_procedure(?)};
Dieser Schlüsselwort wird verwendet, um externe Verknüpfungen anzuzeigen. Syntax wie folgt-
{oj outer-join}
dabei, externer Verknüpfung = Tabelle {LEFT | RIGHT | VOLLSTANDIG} OUTERJOIN {Tabelle | Suchbedingungen. Zum Beispiel-
String sql = "SELECT Employees VON {oj ThisTable RECHTS AUßERER JOIN ThatTable auf id = '100'}"; stmt.execute(sql);