diff --git a/zusammenfassung.pdf b/zusammenfassung.pdf index 46fcc75..6ee84e6 100644 Binary files a/zusammenfassung.pdf and b/zusammenfassung.pdf differ diff --git a/zusammenfassung.tex b/zusammenfassung.tex index d1940a3..db8aff1 100644 --- a/zusammenfassung.tex +++ b/zusammenfassung.tex @@ -200,4 +200,45 @@ \end{itemize} \end{itemize} \end{itemize} + +\section{Programmzugriff} +\begin{itemize} + \item \begriff{Precompiler} übersetzt SQL-Anweisungen (mittels \texttt{EXEC SQL} gekennzeichnet) zur \wichtig{Compiler-Zeit} in die verwendete Programmiersprache \begin{itemize} + \item Deklaration der verwendeten Variablen am Anfang mittels \texttt{DECLARE SECTION} + \item Fehlermeldungen und ähnliches werden über die sogenannte \begriff{SQL communication area} verwaltet (\texttt{INCLUDE SQLCA} am Anfang) + \item Mengen-orientes Paradigma des DBVS oft nicht mit Programmiersprache vereinbar $\Rightarrow$ Einrichtung eines \begriff{Cursors} zum tupelweisen Durchlaufen der Ergebnismenge + \item Beispielablauf: \texttt{DECLARE CURSOR} $\rightarrow$ \texttt{OPEN} $\rightarrow$ (mehrfach) \texttt{FETCH} bis Fehlercode $== 100$ $\rightarrow$ \texttt{CLOSE} + \item kann durch Präprozessort direkt als \begriff{stored procedure} \textbf{TODO: Verlinkung} angelegt werden + \end{itemize} + \item \begriff{Unterprogrammaufruf} (\begriff{Call-Level-Interface}): \begin{itemize} + \item Übergabe der SQL-Anweisungen zur \wichtig{Laufzeit} + \item Beispiel JDBC \begin{itemize} + \item \texttt{Connection con = DriverManager.getConnection(URL, USER, PASSWORD);} + \item \texttt{Statement anweisung = con.createStatement();\\ + ResultSet ergebnis = anweisung.execureQuery(ANFRAGE);}\\ + außerdem: \texttt{int executeUpdate(String sql)}, \texttt{boolean execute(String sql)} + \item \texttt{while (ergebnis.next()) \{\\ + int pnr = ergebnis.getInt(1);\\ + \}} + \end{itemize} + \item Bei mehrfacher Ausführung der gleichen Abfrage mit unterschiedlichen Werten \begriff{prepared statements} sinnvoll: \begin{itemize} + \item Anfrage enthält Platzhalter für Werte + \item Analyse, Ausführungsplanerstellung und weiteres wird sofort durchgeführte + \item JDBC: \begin{itemize} + \item \texttt{PreparedStatement prep = con.prepareStatement("INSERT ... VALUES (?,?))} + \item Setzen der Werte mittels \texttt{void setDATENTYP(int paramId, DATENTYP val)} + \item Ausführung mit \texttt{prep.executeUpdate()} + \end{itemize} + \end{itemize} + \item bei stored-procedures nur noch einmaliges Analysieren, etc. zur Compile-Zeit erforderlich: \begin{itemize} + \item Prozedur in DBVS bekommt \enquote{Namen}, über den sie mit Werten als Parametern aufrufbar ist + \item JDBC:\begin{itemize} + \item \texttt{CallableStatement call = con.prepareCall("\{ call PROZEDUR \}");} + \item Eingabe-Parameter analog zu prepared statements + \item Ausgabe-Parameter mittels \texttt{registerOutParameter(int paramId, int type)} + \end{itemize} + \end{itemize} + \end{itemize} + \item \begriff{O/R-Mapping} bildet Objekte der Programmiersprace (meist durch Annotationen) auf Tupel der relationalen DB ab +\end{itemize} \end{document} \ No newline at end of file