Putting Records Using Cursors
Prev | Chapter 5. Using Cursors | Next

## Putting Records Using Cursors

You can use cursors to put records into the database. JE's behavior when putting records into the database differs depending on whether the database supports duplicate records. If duplicates are allowed, its behavior also differs depending on whether a comparator is provided for the database. (Comparators are described in Using Comparators).

Note that when putting records to the database using a cursor, the cursor is positioned at the record you inserted.

You can use the following methods to put records to the database:

- `Cursor.put()`

  If the provided key does not exist in the database, then the order that the record is put into the database is determined by the BTree (key) comparator in use by the database.

  If the provided key already exists in the database, and the database does not support sorted duplicates, then the existing record data is replaced with the data provided on this method.

  If the provided key already exists in the database, and the database does support sorted duplicates, then the order that the record is inserted into the database is determined by the duplicate comparator in use by the database.

- `Cursor.putNoDupData()`

  If the provided key and data already exists in the database, then this method returns `OperationStatus.KEYEXIST`.

  If the key does not exist, then the order that the record is put into the database is determined by the BTree (key) comparator in use by the database.

- `Cursor.putNoOverwrite()`

  If the provided key already exists in the database, then this method returns `OperationStatus.KEYEXIST`.

  If the key does not exist, then the order that the record is put into the database is determined by the BTree (key) comparator in use by the database.

For example:

    package com.sleepycat.examples.je.gettingStarted;

    import com.sleepycat.je.Cursor;
    import com.sleepycat.je.Database;
    import com.sleepycat.je.DatabaseEntry;
    import com.sleepycat.je.OperationStatus;

    ...

    // Create the data to put into the database
    String key1str = "My first string";
    String data1str = "My first data";
    String key2str = "My second string";
    String data2str = "My second data";
    String data3str = "My third data";

    Cursor cursor = null;
    try {
        ...
        // Database and environment open omitted for brevity
        ...

        DatabaseEntry key1 = new DatabaseEntry(key1str.getBytes("UTF-8"));
        DatabaseEntry data1 = new DatabaseEntry(data1str.getBytes("UTF-8"));
        DatabaseEntry key2 = new DatabaseEntry(key2str.getBytes("UTF-8"));
        DatabaseEntry data2 = new DatabaseEntry(data2str.getBytes("UTF-8"));
        DatabaseEntry data3 = new DatabaseEntry(data3str.getBytes("UTF-8"));

        // Open a cursor using a database handle
        cursor = myDatabase.openCursor(null, null);

        // Assuming an empty database.

        OperationStatus retVal = cursor.put(key1, data1); // SUCCESS
        retVal = cursor.put(key2, data2); // SUCCESS
        retVal = cursor.put(key2, data3); // SUCCESS if dups allowed,
                                          // KEYEXIST if not.

    } catch (Exception e) {
        // Exception handling goes here
    } finally {
       // Make sure to close the cursor
       cursor.close();
    }

Prev | Up | Next
Getting Records Using the Cursor | Home | Deleting Records Using Cursors