******************************************************************************
* (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.
*
******************************************************************************
*
*                    README for SQLJ Samples on Windows
*
* The <install_path>\sqllib\samples\java\sqlj directory contains this README 
* file. Where <install_path> is the location of DB2 9.7 on your hard drive.
* The default location for <install_path> is
*               C:\Program Files\IBM
*
* This README describes how to build and run sqlj sample code for DB2 9.7.
* The DB2 9.7 sqlj samples are located in the following directory:
*    <install_path>\sqllib\samples\java\sqlj 
*
* Copy the files from this directory to your working directory prior to
* building the sample programs. The sample programs directory is
* typically read-only on most platforms and some samples produce output
* files that require write permissions on the directory.
*
* WARNING: Some of these samples may change your database or database
* manager configuration.  Execute the samples against
* a test database only, such as the DB2 SAMPLE database.
*
******************************************************************************
*
*              Prepare your DB2 sample development environment
*
*  1) Copy the files in <install_path>\sqllib\samples\java\sqlj\* to your
*     working directory and ensure that directory has write permission.
*
*  2) Modify the CLASSPATH to include:
*         <install_path>\sqllib\java\db2java.zip
*         <install_path>\sqllib\java\db2jcc.jar
*         <install_path>\sqllib\java\db2jcc_license_cu.jar
*         <install_path>\sqllib\java\<jdkDirName>\lib
*         <install_path>\sqllib\lib
*         <install_path>\sqllib\function
*         <install_path>\sqllib\java\sqlj.zip
*     where <jdkDirName> is the name of the
*     jdk directory under <install_path>\sqllib\java.
*
*     Modify the PATH to include <install_path>\sqllib\java\<jdkDirName>\bin,
*     <install_path>\sqllib\lib.
*
*     All samples should be run and built in a DB2 Command Window.
*     The DB2 Command Window is needed to execute db2 specific commands.
*     You can follow the step below to open DB2 Command window.
*     From the Start Menu click Start --> Programs --> IBM DB2 -->
*     <DB2 copy name> --> Command Line Tools --> Command Window.
*
*     Please make sure that JDK_PATH( db2
*     database manager  configuration parameter) is
*     pointing to the <install_path>\sqllib\java\<jdkDirName>.
*
*     To see the dbm cfg parameter value, run the following from db2
*     command window and look for the value of JDK_PATH.
*       db2 get dbm cfg
*
*  3) To build and run SQLj samples, you need to:
*
*     1. Enable tcpip:
*          db2set DB2COMM=tcpip
*          db2stop
*          db2start
*
*     2. By default, your database configuration parameter SVCENAME is
*        set to an available port_number. If it is not, update the database
*        configuration with an available port number using the following
*        command:
*          db2 update dbm cfg using SVCENAME <port_number>
*        where <port_number> is an available port_number.
*
*        After you have updated the database configuration manually, you have
*        to restart DB2 using the following commands:
*          db2 terminate
*          db2stop
*          db2start
*
*  4) Start the Database Manager with the following command:
*       db2start
*
*  5) Create the sample database with the following command:
*       db2sampl     
*
*  6) Connect to the database with the following command:
*       db2 connect to sample
*
*  7) To build Stored Procedures and User Defined Functions, ensure
*     that you have write permission on the
*    <install_path>\sqllib\function directory.
*
*  8) cd to the directory containing the files copied in step 1.
*
******************************************************************************
*
*                        Building DB2 Samples
*
*   There are two ways to build DB2 samples: using a nmake utility or
*   using the build files that are included with the DB2 sample
*   programs.
*
*        o To build samples using the nmake utility see
*          'BUILDING SAMPLES USING nmake UTILITY'.
*        o To build samples using the build files or when you do not
*          have a compatible nmake utility see 'BUILDING
*          SAMPLES USING BUILD FILES'.
*
******************************************************************************
*
*                *** BUILDING SAMPLES USING nmake UTILITY ***
*
*      If you have a compatible nmake utility on your system, you
*      can use the makefile provided. Such a nmake utility may be
*      provided by another language compiler.Modify the PATH
*      variable to include the directory containing the nmake
*      utility.
*
*      Depending on your environment, the makefile has to be
*      modified. To run SQLj samples with the makefile provided, you 
*      need to hardcode the password in the makefile. Here is a
*      list of variables you can set in the SQLj makefile:
*            o set DB to the database you want to work with.
*            o set UID to a valid user ID if needed (By default, UID is
*              set to the current user id).
*            o set PWD to the password of the user ID.
*            o set SERVER_NAME to the server's name.
*            o set PORT_NUMBER to an available port number (By default,
*              PORT_NUMBER is set to 50000).
*      For more details refer to the 'VARIABLES' section
*      in the makefile.
*
*      Execute the appropriate 'nmake' command in your working
*      directory:
*
*          o nmake <program name> - builds the sample identified by
*            <program name>
*            Do not include the file extension for the
*            program name.  E.g. nmake DbAuth
*            For any dependencies refer to the individual sample.
*
*          o nmake srv   - builds only samples that can be run on the
*            server,including routines (stored procedures and User
*            Defined Functions).
*
*          o nmake rtn   - builds only routines.
*
*          o nmake call_rtn - builds only client programs that call
*            routines.
*
*          o nmake client_run - builds only programs that run
*            completely on the client (not ones that call routines).
*
*          o nmake all_client  - builds all client samples (all
*            programs in the  'call_rtn' and 'client_run' categories).
*
*          o nmake all - builds all supplied sample programs including
*            routines, stored procedures and UDFs.
*
*      After compiling the sample, run it using normal java
*      invocation,
*          java  <program_name>
*
*      Note:
*        The makefile provided will only work if a compatible nmake
*        executable program is resident on your system in a directory
*        included in your PATH variable. Such a nmake utility may be
*        provided by another language compiler.
*
*******************************************************************************
*
*                 *** BUILDING SAMPLES USING BUILD FILES ***
*
*          As an alternative to the makefile, the build files provided
*          can be used to build the sqlj samples.
*
*          If you do not have a compatible nmake utility you can use
*          the SQLj build files to build SQLj programs.
*
*      Building and Executing Standalone Samples
*      -----------------------------------------
*
*        a) To build an SQLj program without a compatible nmake
*           utility:
*
*                 bldsqlj <program name>
*
*               Note:
*               When you build SQLj programs with the build files, do not
*               include the file extension for the program name.
*
*               Like the SQLj makefile, the SQLj build files need to be
*               updated with a valid user ID, password and an available
*               port number.
*
*                bldsqlj - Builds an SQLj program. Here is the usage of
*                          this build file:
*
*                bldsqlj <prog_name> (requires hardcoding user ID and
*                                     password in the bldsqlj file)
*                bldsqlj <prog_name> <userid> <password>
*                bldsqlj <prog_name> <userid> <password> <server_name>
*                bldsqlj <prog_name> <userid> <password> <server_name>
*                                    <port_number>
*                bldsqlj <prog_name> <userid> <password> <server_name>
*                                    <port_number> <db_name>
*
*                Where,
*                o <prog_name>   - the name of the sample program without the
*                                  .sqlj extension.
*                o <userid>      - user ID needed connect to the database.
*                o <password>    - password needed to connect to the
*                            database.
*                o <server_name> - server's name that you work with.
*                o <port_number> - an available port_number on the server.
*                o <db_name>     - the name of the database where the SQL
*                                  package will be created.
*                                  The default is "sample".
*
*          NOTE: The following sqlj sample programs containing DDL statements
*                need to be pre-compiled using sqlj <program name>.sqlj
*                instead of the build file:
*
*                  TbConstr.sqlj
*                  TbTemp.sqlj
*                  TbUMQT.sqlj
*
*       o After compiling the sample, run it using normal java invocation
*                  java  <program_name>
*
*      Building and Executing Stored Procedures
*      ----------------------------------------
*
           o Build the server file using:
*                bldsqljs <prog_name> (requires hardcoding user ID and
*                                      password in the bldsqlj file.)
*                bldsqljs <prog_name> <userid> <password>
*                bldsqljs <prog_name> <userid> <password> <server_name>
*                bldsqljs <prog_name> <userid> <password> <server_name>
*                <port_number>
*                bldsqljs <prog_name> <userid> <password> <server_name>
*                <port_number> <db_name>
*
*             Where,
*             o <prog_name>   - the name of the sample program without
*                               the .sqlj extension.
*             o <userid>      - user ID needed connect to the database.
*             o <password>    - password needed to connect to the
*                               database.
*             o <server_name> - server's name that you work with.
*             o <port_number> - an available port_number on the server.
*             o <db_name>     - the name of the database where the SQL
*                               package will be created. The default is
*                               "sample".
*
*           o Build stored procedure using the build file:
*                spcat
*
*           o Build the corresponding client file sample using
*                   bldsqljs as shown above.
*
*           o Run the sample using normal java invocation:
*                   java  <Client_prog_name>
*
*      Building and Executing User Defined Functions:
*      ----------------------------------------------
*
*           o Build server file using:
*                    bldsqlj <prog_name> (requires hardcoding user ID and
*                                           password in the bldsqlj file.)
*                    bldsqlj <prog_name> <userid> <password>
*                    bldsqlj <prog_name> <userid> <password> <server_name>
*                    bldsqlj <prog_name> <userid> <password> <server_name>
*                            <port_number>
*                    bldsqlj <prog_name> <userid> <password> <server_name>
*                            <port_number> <db_name>
*                  Where,
*                  o <prog_name>   - the name of the sample program without
*                                    the .sqlj extension.
*                  o <userid>      - user ID needed connect to the database.
*                  o <password>    - password needed to connect to the
*                                    database.
*                  o <server_name> - server's name that you work with.
*                  o <port_number> - an available port_number on the server.
*                  o <db_name>     - the name of the database where the SQL
*                                    package will be created. The default is
*                                    "sample".
*
*           o Build the User Defined Functions using build files:
*                   udfcat or udfjcat.
*
*            o Build the corresponding client file sample using
*                   bldsqlj as shown above.
* 
*            o Run the sample using normal java invocation:
*                   java  <Client_prog_name>
*
*      Building and Running the Data Source Samples
*      --------------------------------------------
*
*      1. Obtain and set up non DB2 packages
*
*         The following packages must be installed in order to build and run
*         the Data Source Samples.
*
*         Package              Location of Package
*         ====================================================================
*         JNDI 1.2.1 class     http://java.sun.com/products/jndi/
*                                                   #downloadLibraries
*
*         File System Service  http://java.sun.com/products/jndi/
*                                                   #downloadProvider 1.2
*
*         JDBC 2.0 Optional    http://java.sun.com/products/jdbc/download.html
*	                                            #spec Package
*
*      To build this set of SQLJ samples, update your CLASSPATH to
*      include the following files:
*          jndi.jar
*          fscontext.jar
*          providerutil.jar
*          jdbc20_stdext.jar
*
*      For instance, if you have these jar files located at C:\JAR, your
*      CLASSPATH should looks like:
*          CLASSPATH=...;C:\JAR\jndi.jar;C:\JAR\fscontext.jar;
*                    C:\JAR\providerutil.jar;C:\JAR\jdbc2_0-stdext.jar
*
*      You also have to update your CLASSPATH to include the path to the
*      directory where jndi.properties is located. For instance, if
*      jndi.properties is located under C:\JAR, your CLASSPATH should
*      looks like:
*          CLASSPATH=...;C:\JAR\jndi.jar;C:\JAR\fscontext.jar;
*                   C:\JAR\providerutil.jar;C:\JAR\jdbc2_0-stdext.jar;C:\JAR\
*
*        NOTE:
*           The SPI (Service Provider Interface) for storing and lookup of
*           DataSources in the JNDI is used as the File System. You can
*           modify jndi.properties if you want to use any other SPI for the
*           JNDI, for instance, LDAP, DNS, etc.
*
*           Please note that the appropriate jar files have to be presented
*           in the CLASSPATH. No changes are required to run the SQLJ sample
*           programs.
*
*      2. Modify Property Files
*
*         Modify the property files DS1.prop, DS2.prop, DS3.prop to reflect
*         your environment.
*         Here is a list of variables you have to modify in these property
*         files:
*
*           o serverName - set to the server name.
*           o portNumber - set to an available port number (by default set
*                          to 50000)
*           o databaseName - set to the database (by default set to
*                           'sample')
*           o userName - set to a valid user ID.
*           o password - set to the user ID's password.
*
*      3. Create the DataSources used in this set of SQLJ programs
*
*        a) Compile the program createRegisterDS.java with the following
*           command:
*
*               javac createRegisterDS.java
*
*        b) Run the createRegisterDS.java program with the following
*           command:
*
*               java createRegisterDS <property_file>
*
*        There are three sample property files. They are as follows:
*
*           1. DS1.prop: jdbc\defaultDataSource
*              - used in DataSource1.sqlj
*
*           2. DS2.prop: jdbc\DB2SimpleDataSource_ds1
*              - used in Batch1Demo.sqlj, Batch2Demo.sqlj, Batch3Demo.sqlj,
*                DataSource2.sqlj, ScrollIterDemo.sqlj
*
*           3. DS3.prop: jdbc\DB2SimpleDataSource_ds2
*              - used in DataSource2.sqlj
*
*         The DataSources are then created and registered in the JNDI.
*
*      4. Create a few sample tables in the SAMPLE database
*
*        a) Compile the CreateDemoSchema.sqlj sample program:
*
*               sqlj CreateDemoSchema.sqlj
*
*        b) Run the CreateDemoSchema.sqlj sample program:
*
*               java CreateDemoSchema
*
*           This will create a schema and four tables in the SAMPLE
*           database.
*           The four tables are as follows:
*
*              Batch_Test1 // used in Batch1Demo, Batch2Demo
*              Batch_Test2 // used in Batch2Demo
*              Scroll_Test
*              BlobClob_Tab
*	
*      5. Compile and Customize
*
*           Compile and Customize the demo sample programs using the provided
*           build file
*           bldsqljds:
*
*                bldsqljds <program_file>
*
*           For instance, if you want to compile and customize
*           DbConnDataSource.sqlj, do the following:
*
*                bldsqljds DbConnDataSource
*
*      Run demo sample programs by the following command:
*
*           java <program_filename>
*
*      For instance, if you want to run Batch1Demo.sqlj, do the following
*      command:
*
*           java Batch1Demo
*
******************************************************************************
*
*              Common file Descriptions
* 
* The following are the common files for SQLj samples. For more
* information on these files, refer to the program source files.
*
******************************************************************************
*
* Batch files
*
* bldsqlj.bat    - build file for application programs
*
******************************************************************************
*
* Common Utility Function files
*
* makefile       - Makefile for sample programs
* Util.sqlj      - utilities used by most programs.
*
******************************************************************************
*
*               SQLj Samples Design
*
* The Java SQLj sample programs form an object-based design reflecting
* the component nature of DB2. Related samples demonstrate a specific
* level of database programming. Each level is identified by the first
* two characters of the sample name. Here are the database levels
* represented by the samples:
*
* Identifier     DB2 Level
*
*     Ap        Applet Level.
*     Db        Database Level.
*     Tb        Table Level.
*     Dt        Data Type Level.
*     Ud        UDF Level.
*     Sp        Stored Procedure Level.
*
******************************************************************************
*
*               SQLj Sample File Descriptions
*
* The following are the SQLj sample files included with DB2. For more
* information on the sample programs, refer to the program source
* files.
*
******************************************************************************
*
* Applet Level
*
* Applt.html    - HTML file for Applt.sqlj
* Applt.sqlj    - How to create applets
*
******************************************************************************
*
* Database Level
*
* DbAuth.sqlj   - How to grant\display\revoke authorities at database
*                 level.
* DbConn.sqlj   - How to connect and disconnect from a database.
* DbMCon.sqlj   - How to connect and disconnect from multiple
*                 databases.
* DbUse.sqlj    - How to use database objects.
*
******************************************************************************
*
* Table Level
*
* LargeRid.sqlj       - How to enable Large RIDs support on both new
*                       tables\tablespaces and existing tables\tablespaces.
*
*                       PREREQUISITE: Run the script LargeRid_setup.db2
*                       before running this sample. Run the LargeRid_cleanup.db2
*                       script to cleanup the database objects after running the
*                       sample.
*
* TbAST.sqlj          - How to use staging table for updating deferred
*                       AST.
*
*                       PREREQUISITE: Run the script TbAST_setup.db2
*                       before running this sample. Run the TbAST_cleanup.db2
*                       script to cleanup the database objects after running
*                       the sample.
*
* TbCompress.sqlj     - How to create tables with null and default
*                       value compression option.
* TbConstr.sqlj       - How to work with table constraints.
* TbCreate.sqlj       - How to create, alter, and drop tables.
* TbIdent.sqlj        - How to use Identity Columns.
* TbInfo.sqlj         - How to get and set information at a table
*                       level.
* TbMod.sqlj          - How to modify information in a table.
* TbOnlineInx.sqlj    - How to create and reorg indexes on a table.
* TbPriv.sqlj         - How to grant\display\revoke privileges at a
*                       table level.
* TbRead.sqlj         - How to read information in a table.
* TbRowcompress.sqlj  - How to perform row compression on a table.
*
*                       PREREQUISITE: Run the script TbRowcompress_setup.db2
*                       before running this sample. Run the
*                       TbRowcompress_cleanup.db2 script to cleanup the
*                       database objects after running the sample.
*
* TbRunstats.sqlj     - How to perform runstats on a table.
* TbSel.sqlj          - How to select from each of: insert, update,
*                       delete.
* TbTemp.sqlj         - How to use Declared Temporary Table.
* TbTrig.sqlj         - How to use a trigger on a table.
* TbUMQT.sqlj         - How to use user materialzed query tables
*                       (summary tables).
* SetIntegrity.sqlj   - How to perform online SET INTEGRITY on a table.
*
*                       PREREQUISITE: Run the script SetIntegrity_setup.db2
*                       before running this sample. Run the
*                       SetIntegrity_cleanup.db2 script to cleanup the
*                       database objects after running the sample.
*
******************************************************************************
*
* Data Type Level
*
* DtUdt.sqlj     - How to create\use\drop user defined distinct types.
*
******************************************************************************
*
* UDF Level
*
* UDFcli.sqlj    - Call the UDFs in UDFsrv.java.
* UDFCreate.db2  - CLP script to catalog the Java UDFs contained in
*                  UDFsrv.java.
* UDFDrop.db2    - CLP script to uncatalog the Java UDFs contained in
*                  UDFsrv.java.
* UDFjcli.sqlj   - Call the UDFs in UDFjsrv.java.
* UDFjCreate.db2 - CLP script to catalog the Java UDFs contained in
*                  UDFjsrv.java.
* UDFjDrop.db2   - CLP script to uncatalog the Java UDFs contained in
*                  UDFjsrv.java.
* UDFjsrv.java   - Provide UDFs to be called by UDFjcli.sqlj.
* UDFsrv.java    - Provide UDFs to be called by UDFcli.sqlj.
*
******************************************************************************
*
* Stored Procedure Level
*
* SpCreate.db2  - CLP script to issue CREATE PROCEDURE statements
* SpDrop.db2    - CLP script to drop stored procedures from the catalog
* SpClient.sqlj - Client application that calls the stored procedures.
* SpServer.sqlj - Stored procedure functions built and run on the
*                 server
* SpIterat.sqlj - Iterator class file for SpServer.sqlj.
*
******************************************************************************
*
* Java Beans Samples
*
* CreateEmployee.sqlj	- How to create an employee record.
* GeneratePayroll.sqlj	- How to generate payroll reports by
*                         department.
*
******************************************************************************
*
* Data Source Sample Files
*
* Batch1Demo.sqlj:       - setBatchLimit(2) creates two Execution Contexts
*                          ex1\ex2.Inserts two rows using  ex1 and perform
*                          executeBatch()Does a JDBC select to verify 2 rows
*                          in table.Runs two update statements for the two
*                          rows with ex2(DOES NOT do an executeBatch())
*                          Performs an SQLJ select to verify that the two
*                          rows were updated - The SQLJ select will trigger
*                          an implicit Batch Execute
*
* Batch2Demo.sqlj:       - setBatching(true)  BatchLimit(4) Uses two tables
*                          Batch_Test1\Batch_Test2. Loops for three times
*                          (insert statement on Batch_Test2).
*                          Batch_Test2 should have no rows
*                          Verifies through JDBC select (as implicit Execute
*                          OR  executeBatch() has not been called)
*                          setBatchLimit(1)
*                          Inserts one row into Batch_Test1. This should
*                          create new Batch and previous batch should be
*                          implicitly executed.Batch_Test2 should have three
*                          rows. Batch_Test1 should have
*                          one row (after SQLJ select has been executed)
*
* Batch3Demo.sqlj        - setBatching(true)  setBatchLimit(UNLIMITED_BATCH)
*                          inserts fifty rows into Batch_Test1
*                          executeBatch().Verifies the number of rows
*                          through SELECT count(*) from Batch_Test1
*
* DbConnDataSource.sqlj  - This is a sample program using the
*                          defaultContext.Because there is no context
*                          specified in the SELECT statement, the
*                          underlying context should be obtained from the
*                          DataSource jdbc\defaultDataSource which is
*                          registered using createRegisterDS.java and DS1.prop.
*
* DbConMDataSources.sqlj - This sample program  is using the contexts
*                          TesCtx1 & TestCtx2.The underlying connection
*                          from ctx1 is obtained  from the  DataSource
*                          jdbc\DB2SimpleDataSource_ds1.Another
*                          connection from ctx2 is obtained from
*                          jdbc\DB2SimpleDataSource_ds2
*
* ScrollIterDemo.sqlj    - This program illustrates usage of Named and
*                          Positional Scrollable Iterators in SQLJ. Also, it
*                          shows how a Scrollable Iterator can be
*                          used for positioned update by implementing
*                          ForUpdate Clause. However,
*                          updates will work only when the program is
*                          customized.
*
* BlobClobDemo.sqlj      - This sample program shows the way to access
*                          Blob\Clob fields in DB2 tables. For accessing
*                          LOBs in S\390 Db2 additional auxiliary tables
*                          and indexes need to be created on server side.
*
* createRegisterDS.java  - Creates and registers dataSources as specified
*                          by the property files.The DataSources will be
*                          created in the temp directory. The file uses
*                          File System SPI to create a .bindings file in
*                          the temp directory C:\temp (as defined in
*                          jndi.properties).
*
* CreateDemoSchema.sqlj  - This program creates the schema for the
*                          DataSource Demo programs.
*
******************************************************************************