Values From Result Sets

Previous      Next

/**
 * 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();
   }
}