9/66
\begin{frame}[fragile]
  \frametitle{Dynamic SQL: JDBC}
  
  A Java Database Connectivity (JDBC) example:
  \begin{exampleblock}{}\vspace{-1ex}
    {\scriptsize
%      \ttfamily\lipsum
%      \fontseries{lc}\selectfont
%      \lipsum
% import java.sql.* ;
% 
% public class ShowStudents {
%   public static void main(String args[]) throws Exception {
%     String url = "jdbc:mysql://localhost/db" ;
%     System.setProperty("jdbc.drivers",  
%                        "org.gjt.mm.mysql.Driver");
    \begin{lstlisting}[language=Java]
    Connection conn = DriverManager.getConnection(url);
  
    Statement stat = conn.createStatement() ;
    ResultSet rs = stat.executeQuery(
      "select sid, name from students"
    );
  
    while (rs.next()) {
      int sid = rs.getInt("sid");
      String name = rs.getString("name");
      System.out.println(sid + ": " + name);
    }
    conn.close();
    \end{lstlisting}\vspace{-4ex}
    \begin{tikzpicture}[overlay,nodes={rectangle,fill=red!20,rounded corners=1mm},inner sep=.5mm]
       \node [shift={(-3.7cm,1.4cm)},align=left]  at (current page.south east) {getInt(...), getString(...)\\
         fetch column values by name};
    \end{tikzpicture}
    \begin{tikzpicture}[overlay,nodes={rectangle,fill=red!20,rounded corners=1mm},inner sep=.5mm]
       \node [shift={(-.22cm,1.75cm)},align=left]  at (current page.south west) {fetch results\\
         row by row};
    \end{tikzpicture}
    }
  \end{exampleblock}
  Use \sql{rs.wasNull(attribute)} to check if \sql{attribute} is \sql{null}.
  \pause\smallskipp
  
  \begin{goal}{}
    The \emph{Impedance Mismatch}: database query language does not match the application programming language.
  \end{goal}
  (Different data models and data types.)

%   Note that:
%   \begin{itemize}
%     \item SQL data types are mapped to Java data types
%     \item \sql{rs.wasNull(attribute)} checks if the attribute is \sql{null}
%   \end{itemize}
\end{frame}