Databases Reference
In-Depth Information
die Verbindung zum RDBMS aufgebaut hat, gar nicht berechtigt ist, mit diesen
Objekten zu arbeiten.
Wenn die „Formalitäten“ erledigt sind, kann das RDBMS die Anweisung opti-
mieren. Es gibt in den meisten Fällen mehrere Möglichkeiten eine Anweisung
auszuführen. Es ist die Aufgabe des Optimierers eine möglichst schnelle und
ressourcenschonende Variante zu ermitteln. Je nach Komplexität der Anwei-
sung kann dieser Verarbeitungsschritt sehr umfangreich sein. Das Ergebnis
des Optimierers ist ein so genannter Abfrageplan (siehe Abschnitt 20.6).
Wenn der Abfrageplan vorliegt, kann das RDBMS ihn ausführen.
Bei einer hinreichend bösartigen SQL-Anweisung ist es durchaus möglich, dass
die eigentliche Ausführung weniger Zeit benötigt als die übrigen vier Schrit-
te. Insbesondere die Optimierung kann ausgesprochen aufwändig sein. Moder-
ne RDBMS bieten die Möglichkeit, die ersten vier Schritte einer Anweisung nur
ein einziges Mal auszuführen und die soweit vorbereiteten Anweisungen auf Ab-
ruf für eine erneute Ausführung vorzuhalten. Diese Vorbereitung kann auf SQL-
Ebene mit Hilfe der Anweisung prepare durchgeführt werden; JDBC kennt da-
für eigene Typen und Methoden:
String insert = "insert into reihen values(4711,'Asterix', 34)";
PreparedStatement prepared = con.prepareStatement(insert);
Für unsere aktuelle Verbindung hält das RDBMS die vorbereitete Anweisung ab
jetzt zur Ausführung vor. Die Ausführung selbst ist schnell angewiesen:
prepared.execute();
Ebenso wie der Typ Statement kennt der Typ PreparedStatement die Me-
thoden executeUpdate und executeQuery . Ein PreparedStatement , das
wir wie im Beispiel nutzen, hilft uns aber wenig, da wir es nur ein einziges Mal
verwenden. Für andere Comicreihen müssen wir eine neue Anweisung als Text
definieren und dann ein weiteres Objekt vom Typ PreparedStatement erzeu-
gen.
Wesentlich mehr Dynamik geben uns durch Fragezeichen repräsentierte Platzhal-
ter:
insert = "insert into reihen values(?, ?, ?)";
prepared = con.prepareStatement(insert);
prepared.setInt(1, 4715);
prepared.setString(2, "Asterix");
prepared.setInt(3, 34);
prepared.execute();
prepared.close();
Das RDBMS kann die Anweisung vorbereiten, ohne auch nur einen Wert zu
kennen. Es reicht, wenn wir dem entsprechenden Platzhalter unmittelbar vor
 
Search WWH ::




Custom Search