Programmzugriff

This commit is contained in:
Marco Ammon 2019-02-11 16:39:37 +01:00
parent 8c88be52c7
commit f7a156defd
2 changed files with 41 additions and 0 deletions

Binary file not shown.

View File

@ -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}