Programmzugriff
This commit is contained in:
parent
8c88be52c7
commit
f7a156defd
Binary file not shown.
@ -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}
|
Loading…
Reference in New Issue
Block a user