Transactional Cursors
Prev | Chapter 7. Transactions | Next

## Transactional Cursors

You transactionally protect a cursor by opening it using a transaction. All operations performed with that cursor are subsequently performed within the scope of that transaction. You must be sure to close the cursor before committing the transaction.

For example:

    package je.gettingStarted;

    import com.sleepycat.je.Database;
    import com.sleepycat.je.DatabaseEntry;
    import com.sleepycat.je.DatabaseException;
    import com.sleepycat.je.Environment;
    import com.sleepycat.je.Cursor;
    import com.sleepycat.je.Transaction;

    ...

    Cursor cursor = null;
    Database myDb = null;
    Environment myEnv = null;
    Transaction txn = null;

    try {
        ...
        // Environment and database opens omitted for brevity
        ...
        DatabaseEntry key1 =
            new DatabaseEntry((new String("key1")).getBytes("UTF-8"));
        DatabaseEntry data1 =
            new DatabaseEntry((new String("data1")).getBytes("UTF-8"));
        DatabaseEntry key2 =
            new DatabaseEntry((new String("key2")).getBytes("UTF-8"));
        DatabaseEntry data2 =
            new DatabaseEntry((new String("data2")).getBytes("UTF-8"));

        // Start a transaction
        txn = myEnv.beginTransaction(null, null);
        // Open a cursor using the transaction
        cursor = myDb.openCursor(txn, null);

        // Put the data. This is transactionally protected
        cursor.put(key1, data1);
        cursor.put(key2, data2);
        // Close the cursor and then commit the transaction
        if (cursor != null) {
            cursor.close();
            cursor = null;
         }

         if (txn != null) {
            txn.commit();
            txn = null;
         }
    } catch (Exception e) {
        // If an error occurs, close the cursor and abort.
        // None of the write operations performed by this cursor
        // will appear in the Database.
        System.err.println("Error putting data: " + e.toString());
        try {
            if (cursor != null) {
                cursor.close();
                cursor = null;
            }

            if (txn != null) {
                txn.abort();
                txn = null;
            }
        } catch (DatabaseException dbe) {
            // Error reporting goes here
        }
    }

Prev | Up | Next
Committing and Aborting Transactions | Home | Configuring Read Uncommitted Isolation