IsolationLevel and Mode Properties Example (VJ++)

Microsoft ActiveX Data Objects (ADO)

IsolationLevel and Mode Properties Example (VJ++)

This example uses the Mode property to open an exclusive connection, and the IsolationLevel property to open a transaction that is conducted in isolation of other transactions.

import com.ms.wfc.data.*;
import java.io.*;

public class IsolationLevelX
{
// The main entry point for the application.
public static void main (String[] args)
{
    IsolationLevelX();
    System.exit(0);
}

// IsolationLevelX Function

static void IsolationLevelX()
{
    // Define ADO Objects
    Connection cnn1 = null;
    Recordset rstTitles = null;

    // Assign connection string to variable
    String strCnn = "Provider=sqloledb;Data Source=srv;"+
                    "Initial Catalog=Pubs;User Id=sa;Password=;";

    // Declarations
    BufferedReader in = 
        new BufferedReader ( new InputStreamReader(System.in));
    String line = null;

    try
    {
        // Open connection and Titles table
        cnn1 = new Connection();

        cnn1.setMode(AdoEnums.ConnectMode.SHAREEXCLUSIVE);
        cnn1.setIsolationLevel(AdoEnums.IsolationLevel.ISOLATED);
        cnn1.open(strCnn);

        rstTitles = new Recordset();
        rstTitles.setCursorType(AdoEnums.CursorType.DYNAMIC);
        rstTitles.setLockType(AdoEnums.LockType.PESSIMISTIC);
        rstTitles.open("Titles", cnn1, AdoEnums.CursorType.DYNAMIC, 
            AdoEnums.LockType.PESSIMISTIC);

        cnn1.beginTrans();

        // Display the connection mode
        if (cnn1.getMode() == AdoEnums.ConnectMode.SHAREEXCLUSIVE)
            System.out.println("\n\tConnection mode is exclusive");
        else
            System.out.println("\n\tConnection mode is not exclusive");
        System.out.println("\nPress <Enter> to continue..");
        in.readLine();

        // Display the Isolation level
        if ( cnn1.getIsolationLevel() == AdoEnums.IsolationLevel.ISOLATED)
            System.out.println("\tTransaction is Isolated\n");
        else
            System.out.println("\tTransaction is not Isolated\n");
        System.out.println("\nPress <Enter> to continue..");
        in.readLine();

        // Change the type of psychology titles
        while(!rstTitles.getEOF())
        {

            if(rstTitles.getField("Type").getString().trim().
                equals(new String("psychology")))
            {
                rstTitles.getField("Type").setString("self_help");
                rstTitles.update();
            }
            rstTitles.moveNext();

        }

        // Print current data in recordset
        rstTitles.requery();
        while(!rstTitles.getEOF())
        {
            System.out.println(rstTitles.getField("Title").getString() + 
                " - " + rstTitles.getField("Type").getString() );
            rstTitles.moveNext();
        }
        System.out.println("\nPress <Enter> to continue..");
        in.readLine();

        // Restore original data
        cnn1.rollbackTrans();

        // Cleanup objects before exit
        rstTitles.close();
        cnn1.close();
    }
    catch(AdoException ae)
    {
        // Notify the user of any errors that result from ADO

        // As passing a connection, check for null pointer first
        if(cnn1 !=null)
        {
            PrintProviderError(cnn1);
        }
        else
        {
            System.out.println("Exception:" + ae.getLocalizedMessage());
        }
    }

    // System Read requires this catch
    catch(java.io.IOException je)
    {
        PrintIOError(je);

    }
}

    // PrintProviderError Function

    static void PrintProviderError( Connection Cnn1 )
    {
        // Print Provider errors from Connection object.
        // ErrItem is an item object in the Connection’s Errors collection.
        com.ms.wfc.data.Error  ErrItem = null;
        long nCount = 0;
        int  i      = 0;

        nCount = Cnn1.getErrors().getCount();

        // If there are any errors in the collection, print them.
        if( nCount > 0);
        {
            // Collection ranges from 0 to nCount - 1
            for (i = 0; i< nCount; i++)
            {
                ErrItem = Cnn1.getErrors().getItem(i);
                System.out.println("\t Error number: " + ErrItem.getNumber()
                    + "\t" + ErrItem.getDescription() );
            }
        }

    }

    // PrintIOError Function

    static void PrintIOError( java.io.IOException je)
    {
        System.out.println("Error \n");
        System.out.println("\tSource = " + je.getClass() + "\n");
        System.out.println("\tDescription = " + je.getMessage() + "\n");
    }
}