20-CS-694 Advanced Programming Techniques Spring 2012
JDBC

Interfaces, Exceptions, Graphics, Animation, Threads, Reflection, Networking, RMI, JDBC, JNI

     Previous      Next      PostgreSQL Docs      MySQL Docs      PostgreSQL      MySQL      All lectures

Values From Result Sets

/**
 * This is a demonstration JDBC applet.
 * It displays some simple standard output from the Coffee database.
 */

import java.applet.Applet;
import java.awt.Graphics;
import java.util.Vector;
import java.sql.*;

public class OutputApplet extends Applet implements Runnable {
   private Thread worker;
   private Vector queryResults;
   private String message = "Initializing";

   public synchronized void start() {
      // Every time "start" is called we create a worker thread to
      // re-evaluate the database query.
      if (worker == null) {   
         message = "Connecting to database";
         worker = new Thread(this);
         worker.start();
      }
   }

   /**
     * The "run" method is called from the worker thread.  Notice that
     * because this method is doing potentially slow databases accesses
     * we avoid making it a synchronized method.
     */

   public void run() {
      String url = "jdbc:mySubprotocol:myDataSource";
      String query = "select COF_NAME, PRICE from COFFEES";
   
      try {
         Class.forName("myDriver.ClassName");
      }
      catch(Exception ex) {
         setError("Can't find Database driver class: " + ex);
         return;
      }

      try {
         Vector results = new Vector();
         Connection con = DriverManager.getConnection(url, "myLogin", "myPassword");
         Statement stmt = con.createStatement();
         ResultSet rs = stmt.executeQuery(query);
         while (rs.next()) // Move table "cursor" to the next row
         {
            String s = rs.getString("COF_NAME");  // Also: rs.getString(1)
            float f = rs.getFloat("PRICE");
            String text = s + "     " + f;
            results.addElement(text);
         }

         stmt.close();
         con.close();

         setResults(results);

      }
      catch(SQLException ex) {
         setError("SQLException: " + ex);
      }
   }

   /**
     * The "paint" method is called by AWT when it wants us to
     * display our current state on the screen.
     */

   public synchronized void paint(Graphics g) {
      // If there are no results available, display the current message.
      if (queryResults == null) {
         g.drawString(message, 5, 50);
         return;
      }

      // Display the results.
      g.drawString("Prices of coffee per pound:  ", 5, 10);
      int y = 30;
      java.util.Enumeration enum = queryResults.elements();
      while (enum.hasMoreElements()) {
         String text = (String)enum.nextElement();
         g.drawString(text, 5, y);
         y = y + 15;
      }
   }

   /**
     * This private method is used to record an error message for
     * later display.
     */

   private synchronized void setError(String mess) {
      queryResults = null;   
      message = mess;   
      worker = null;
      // And ask AWT to repaint this applet.
      repaint();
   }

   /**
     * This private method is used to record the results of a query, for
     * later display.
     */

   private synchronized void setResults(Vector results) {
      queryResults = results;
      worker = null;
      // And ask AWT to repaint this applet.
      repaint();
   }
}