So wie ein Verbindungsobjekt Anweisungen und Vorbereitungsobjekte erstellt hat, werden auch CallABLESTATEMENT -Objekte erstellt, mit denen die gespeicherte Datenbank -Prozedur ausgeführt werden.
Erstellen Sie ein Callablestatement -Objekt:
Angenommen, die folgenden Oracle -gespeicherten Verfahren müssen ausgeführt werden:
Verfahren erstellen oder ersetzen Sie die GetEMPNAME (EMP_ID in Nummer, EMP_FIRST OUT VARCHAR) Asbegin wählen Sie zuerst in emp_first von Mitarbeitern, wobei ID = emp_id; enden;
HINWEIS: Das obige hat Oracle gespeicherte Prozeduren geschrieben, aber wir verwenden die MySQL -Datenbank und schreiben dieselben gespeicherten Prozeduren für MySQL wie folgt und erstellen Sie sie in der EMP -Datenbank:
Declimiter $$ Drop -Verfahren, wenn existiert `emp`getempname` $$ Erstellen Verfahren` EMP`.`getempname` (in emp_id int, out emp_first varchar (255)) Beginnen Sie mit den Mitarbeitern, wobei id = emp_id; end $$ MELTIERTE Wählen Sie zuerst in emp_first aus, wobei id = emp_id; end $$ MELTIMITIner;
Es gibt drei Arten von Parametern: IN, OUT und OUT. PrepedStatement -Objekt verwendet nur im Parameter. Das Callablestatement -Objekt kann alle drei verwenden.
Hier sind jede Definition:
Das folgende Code -Snippet zeigt, wie ein Callablestatement -Objekt basierend auf der oben gespeicherten Prozedur mithilfe der Connection.PrePareCall () -Methode instanziiert wird.
Callablestatement cstmt = null; try {string sql = "{call getEmpname (?,?)}"; CSTMT = Conn.PreeRecall (SQL); . . .} catch (sqlexception e) {. . .} Endlich { . . .}Die SQL der String -Variablen stellt eine gespeicherte Prozedur mit Parameter -Platzhaltern dar.
Verwenden eines CallAnlestatement -Objekts wird ein vorbereitendes Objekt verwendet. Der Wert muss an alle Parameter gebunden sein, bevor die Anweisung ausgeführt wird, andernfalls wird eine SQLEXception empfangen.
Wenn es einen Parameter gibt, befolgen Sie einfach die gleichen Regeln und Tricks, die für das vorbereitete Objekt gelten. Verwenden Sie die setxxx () -Methode, die dem Java -Datentyp entspricht, um zu gebunden.
Bei der Verwendung von Out- und In -Out -Parametern muss RegisterOutParameter () mit der zusätzlichen Callablestatement -Methode verwendet werden. RegisterOutParameter () Methode JDBC -Datentyp, die an die vom Datentyp zurückgegebene gespeicherte Prozedur gebunden sind.
Sobald die gespeicherte Prozedur aufgerufen wurde, wird der Wert unter Verwendung der Ausgabeparameter der Methode getXxx () abgerufen. Diese Methode läuft SQL -Typwerte, um Java -Datentypen abzurufen.
Schließen Sie das Callablestatement -Objekt:
So wie es andere Anweisungsobjekte schließt, sollte das CallAnlestatement -Objekt auch aus dem gleichen Grund geschlossen werden.
Ein einfacher Anruf bei der Close () -Methode erledigt den Job. Wenn das Verbindungsobjekt zuerst geschlossen ist, schließt es auch das Callablestatement -Objekt. Das Callablestatement -Objekt sollte jedoch immer explizit geschlossen sein, um eine korrekte Freigabe zu gewährleisten.
Callablestatement cstmt = null; try {string sql = "{call getEmpname (?,?)}"; CSTMT = Conn.PreeRecall (SQL); . . .} catch (sqlexception e) {. . .} endlich {cstmt.close ();} PS: CALLABLESTATEMENT -Objektinstanz
Hier finden Sie ein Beispiel für eine von MySQL gespeicherte Prozedur mit Callablestatement zusammen mit dem folgenden GetEMPNAME ():
Bitte stellen Sie sicher, dass die gespeicherte Prozedur in der EMP -Datenbank erstellt wurde. Es kann mit dem MySQL Query -Browser erfolgen.
Declimiter $$ Drop -Verfahren, wenn existiert `emp`getempname` $$ Erstellen Verfahren` EMP`.`getempname` (in emp_id int, out emp_first varchar (255)) Beginnen Sie mit den Mitarbeitern, wobei id = emp_id; end $$ MELTIERTE Wählen Sie zuerst in emp_first aus, wobei id = emp_id; end $$ MELTIMITIner;
Dieser Skriptcode wurde basierend auf der Installation der Umgebung und Datenbank im vorherigen Kapitel geschrieben.
Kopieren Sie das folgende Beispiel jdbcexample.java, kompilieren und rennen Sie wie unten gezeigt:
// Schritt 1. Importieren der erforderlichen Paketesimport Java.sql. statische endgültige Zeichenfolge db_url = "jdbc: mysql: // localhost/emp"; // Datenbankanmeldeinformationen static Final String user = "Benutzername"; statische endgültige String -Pass = "Passwort"; public static void main (String [] args) {Verbindung conn = null; CallABLESTATEMENT STMT = NULL; try {// Schritt 2: Registrieren Sie die JDBC -Treiberklasse.Forname ("com.mysql.jdbc.driver"); // Schritt 3: Öffnen Sie ein Verbindungssystem.out.println ("Verbindung zu Datenbank herstellen ..."); conn = driverManager.getConnection (db_url, Benutzer, Pass); // Schritt 4: Führen Sie ein Query -System aus. String sql = "{call getempName (?,?)}"; STMT = Conn.PreeRecall (SQL); // Binden Sie zuerst im Parameter, dann binden Sie Parameter int empid = 102; stmt.setint (1, empid); // Dies würde ID als 102 // festlegen, da der zweite Parameter nicht mehr registriert wird. // Verwenden Sie die ausführende Methode, um die gespeicherte Prozedur auszuführen. System.out.println ("gespeicherte Prozedur ausführen ..."); stmt.execute (); // Mitarbeitername mit GETXXX -Methode String empname = stmt.getString (2) abrufen; System.out.println ("EMP -Name mit ID:" + empid + "ist" + empnname); stmt.close (); conn.close (); } catch (sqlexception se) {// Fehler für JDBC SE.printstacktrace () verwandeln; } catch (Ausnahme e) {// Fehler für class.Forname e.printstacktrace (); } endlich {// Block Block Block, um Ressourcen zu schließen, versuche {if (stmt! = null) stmt.close (); } catch (sqlexception se2) {} // nichts, was wir versuchen können {if (conn! = null) conn.close (); } catch (sqlexception se) {se.printstacktrace (); } // End endlich try} // Ende try system.out.println ("Auf Wiedersehen!"); } // Ende Main} // End JDBCExampleKompilieren Sie nun das obige Beispiel wie folgt:
C:> Javac jdbcexample.java
Beim Ausführen von JDBCExample wird die folgenden Ergebnisse erzielt:
C:> Java Jdbcexample
Verbindung zu Datenbank herstellen ... Erstellen von Anweisung ... Ausführung gespeicherter Prozedur ... EMP -Name mit ID: 102 ist Zaidgoodbye!
Die SQL Escape -Syntax von JDBC:
Die Escape -Syntax ermöglicht die Flexibilität, bestimmte Funktionen der Datenbank mithilfe von Standard -JDBC -Methoden und -Hereigenschaften zu verwenden.
Das General SQL Escape Syntax -Format lautet wie folgt:
{Schlüsselwort 'Parameter'}Hier finden Sie folgende, die bei der JDBC -Programmierung sehr nützlich sind:
D, T, TS -Schlüsselwörter:
Sie helfen, Datums-, Zeit- und Zeitstempeltext zu bestimmen. Wie Sie wissen, basieren keine zwei Datenbankverwaltungssysteme auf Zeit und Datum auf die gleiche Weise. Diese Escape -Syntax gibt dem Treiber das Format, Datum oder Uhrzeit mit, um die Zieldatenbank zu rendern. Implementierungsbeispiel:
{d 'Yyyy-mm-dd'}Wo yyyy = Jahr, mm = Monat, DD = Tag. Die Verwendung dieser Syntax {d '2009-09-03'} ist der 9. März 2009.
Hier finden Sie ein einfaches Beispiel dafür, wie Sie eine Datumstabelle einfügen:
// Erstellen Sie eine Anweisung ObjectStmt = conn.CreateStatement (); // Daten ==> ID, Vorname, Nachname, Dobstring SQL = "In die Schüler Werte einfügen" + "(100, 'Zara', 'ali', {d '2001-12-16'})"; stmt.executeupdate (SQL);Ebenso kann eine der folgenden zwei Syntaxe verwendet werden, ob T oder TS:
{t 'HH: MM: SS'}Wo HH = Stunden, mm = Minuten, SS = Sekunden. Die Verwendung dieser Syntax {t '13: 30: 29 '} ist 13:30 Uhr 29 Uhr.
{TS 'YYYY-MM-DD HH: MM: SS'}Dies sind die beiden oben genannten Syntaxe 'D' und 'T', um die Zeitstempelkombinationssyntax darzustellen.
Es entkommen Keywords:
Dieses Schlüsselwort identifiziert das entkommene Zeichen, das in der ähnlichen Klausel verwendet wird. Nützlich bei der Verwendung von SQL Wildcard %, bei dem Null oder mehr Zeichen übereinstimmen. Zum Beispiel:
String SQL = "Symbol aus mathSymbols auswählen, wobei Symbol '/%' {Escape ''}"; stmt.execute (SQL);Wenn Sie den Backslash Charakter () als Fluchtzeichen verwenden, müssen Sie auch zwei Backslash -Zeichen im Java -String -Literal verwenden, da der Backslash auch ein Java -Fluchtcharakter ist.
FN Schlüsselwörter:
Dieses Schlüsselwort bedeutet, skalare Funktionen in DBMs zu verwenden. Beispielsweise können Sie die Funktion SQL Länge verwenden, um die Länge einer GE -Zeichenfolge zu berechnen:
{fn Länge ('Hallo Welt')}Dies wird 11 zurückkehren, die Länge der String 'Hello World'. .
Rufen Sie Keywords an:
Dieses Schlüsselwort wird verwendet, um gespeicherte Prozeduren aufzurufen. Für eine gespeicherte Prozedur benötigen Sie beispielsweise einen Parameter, verwenden Sie die folgende Syntax:
{call my_procedure (?)};Für eine gespeicherte Prozedur ist ein Parameter erforderlich und ein Out -Parameter wird unter Verwendung der folgenden Syntax zurückgegeben:
{? = rufen Sie my_procedure (?)} auf; OJ -Schlüsselwörter:
Dieses Schlüsselwort wird verwendet, um einen externen Join darzustellen. Die Syntax ist wie folgt:
{oj oter-join}Externe Join -Tabelle = {links | Rechts | Full} externer Join {Tabelle | externer Join} Suchkriterien. Zum Beispiel:
String SQL = "Wählen Sie Mitarbeiter aus {oj Thistable Right Outer Join, die auf id = '100'}"; stmt.execute (SQL);