//***************************************************************************
// (c) Copyright IBM Corp. 2007 All rights reserved.
// 
// The following sample of source code ("Sample") is owned by International 
// Business Machines Corporation or one of its subsidiaries ("IBM") and is 
// copyrighted and licensed, not sold. You may use, copy, modify, and 
// distribute the Sample in any form without payment to IBM, for the purpose of 
// assisting you in the development of your applications.
// 
// The Sample code is provided to you on an "AS IS" basis, without warranty of 
// any kind. IBM HEREBY EXPRESSLY DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR 
// IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do 
// not allow for the exclusion or limitation of implied warranties, so the above 
// limitations or exclusions may not apply to you. IBM shall not be liable for 
// any damages you suffer as a result of using, copying, modifying or 
// distributing the Sample, even if IBM has been advised of the possibility of 
// such damages.
//***************************************************************************
//
// SOURCE FILE NAME: Applt.sqlj
//
// SAMPLE: An SQLJ applet that uses a JDBC applet driver to access a database
//
//         This sample shows how to write an SQLJ applet that uses the
//         JDBC Type  4 driver to access a DB2 database.
//
//         This sample uses JDBC Type 4 driver to connect to 
//         the "sample" database. Run this sample using the 
//         following steps:
//         1. Create and populate the "sample" database with the following
//            command: db2sampl
//
//         2. Customize Applt.html with your server, port, user ID, and
//            password. Refer to Applt.html for details. 
//
//         3. Compile the program with the following command (you have to 
//            hardcode the userid and password in the build file, bldsqlj, 
//            and update the port number if needed):
//              bldsqlj Applt    
// 
//            Alternatively, you can compile the program with the following 
//            command if you have a compatible make/nmake program on 
//            your system:
//              make/nmake Applt 
//
//         4. Ensure that your working directory is accessible by your web
//            browser. If it is not, copy Applt.class and Applt.html into
//            a directory that is accessible.
//
//         5. To use the JDBC Type 4 driver, copy sqllib\java\db2jcc.jar on
//            Windows or sqllib/java/db2jcc.jar on UNIX, into the same
//            directory as Applt.class and Applt.html.
//
//         6. To run this sample, start your web browser (which must support
//            Java 1.3) and load Applt.html on your client machine. 
//            You can view it locally with the following command:
//              appletviewer Applt.html
//
//
// SQL Statements USED:
//         SELECT
//         UPDATE
//         ROLLBACK
//
//               None
//***************************************************************************
//
// For more information on the sample programs, see the README file.
//
// For information on developing Java applications see the Developing Java Applications book.
//
// For information on using SQL statements, see the SQL Reference.
//
// For the latest information on programming, compiling, and running DB2
// applications, visit the DB2 Information Center at
//     http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp
//**************************************************************************/

import java.sql.*;
import java.awt.*;
import java.applet.Applet;
import sqlj.runtime.*;
import sqlj.runtime.ref.*;

#sql iterator Applt_Cursor1(String empno, String firstnme);
#sql iterator Applt_Cursor2(String);

public class Applt extends Applet
{
  Connection con;

  public void init()
  {
    try
    {
      DefaultContext ctx = DefaultContext.getDefaultContext();
      if (ctx == null)
      {
        // get parameter values from the html page
        String server = getParameter("server");
        String port = getParameter("port");

        // construct the URL (sample is the database name)
        String url = "jdbc:db2://"+server+":"+port+"/sample";

        String userid = getParameter("userid");
        String password = getParameter("password");
        String driverType = getParameter("driverType");

        // use driverType=4
          Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();

        // connect to the 'sample' database with user ID and password
        con = DriverManager.getConnection(url, userid, password);
        con.setAutoCommit(false);

        ctx = new DefaultContext(con);
        DefaultContext.setDefaultContext(ctx);
      }
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

  public void paint(Graphics g)
  {
    try
    {
      Applt_Cursor1 cursor1;
      Applt_Cursor2 cursor2;

      String str1 = null;
      String str2 = null;
      long count1;

      // retrieve data from database
      g.drawString(
        "First, let's retrieve some data from the database...", 10, 10);

      #sql cursor1 = {SELECT empno, firstnme FROM employee};
      g.drawString("Received results:", 10, 25);

      // display the result set
      // cursor1.next() returns false when there are no more rows
      int y = 50;
      int i = 0;
      while (cursor1.next() && (i < 2))
      {
        i++;
        str1 = cursor1.empno();
        str2 = cursor1.firstnme();
        String oneLine = " empno= " + str1 + " firstname= " + str2;
        g.drawString(oneLine, 20, y);
        y = y + 15;
      }
      cursor1.close();

      // retrieve data from the database
      y = y + 40;
      g.drawString(
        "Retrieve the number of rows in employee table...", 10, y);
      #sql {SELECT count(*) INTO :count1 FROM employee};

      y = y + 15;
      if (1 == count1)
      {
        g.drawString(
          "There is " + count1 + " row in employee table.", 10, y);
      }
      else
      {
        g.drawString(
          "There are " + count1 + " rows in employee table.", 10, y);
      }

      // update the database
      y = y + 40;
      g.drawString("Now, update the database...", 10, y);
      #sql {UPDATE employee set firstnme = 'SHILI' where empno = '000010'};

      // retrieve the updated data from the database
      y = y + 40;
      g.drawString(
        "Retrieve the updated data from the database...", 10, y);
      str1 = "000010";
      #sql cursor2 = {SELECT firstnme from employee where empno = :str1};

      // display the result set
      // cursor2.next() returns false when there are no more rows
      y = y + 15;
      g.drawString("Received results:", 10, y);
      y = y + 25;
      while (true)
      {
        #sql {FETCH :cursor2 INTO :str2};
        if (cursor2.endFetch()) break;

        String oneLine = " empno= " + str1 + " firstname= " + str2;
        g.drawString(oneLine, 20, y);
        y = y + 15;
      }
      cursor2.close();

      // roll back the update
      y = y + 40;
      g.drawString("Now, roll back the update...", 10, y);
      #sql {ROLLBACK work};
      y = y + 15;
      g.drawString("Rollback done.", 10, y);
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }
} // Applt