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

## Replacing Records Using Cursors

You replace the data for a database record by using `Cursor.putCurrent()`. This method takes just one argument — the data that you want to write to the current location in the database.

    import com.sleepycat.je.Cursor;

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

    ...
    Cursor cursor = null;
    try {
        ...
        // Database and environment open omitted for brevity
        ...
        // Create DatabaseEntry objects
        // searchKey is some String.
        DatabaseEntry theKey = new DatabaseEntry(searchKey.getBytes("UTF-8"));
        DatabaseEntry theData = new DatabaseEntry();

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

        // Position the cursor. Ignoring the return value for clarity
        OperationStatus retVal = cursor.getSearchKey(theKey, theData,
                                                    LockMode.DEFAULT);

        // Replacement data
        String replaceStr = "My replacement string";
        DatabaseEntry replacementData =
            new DatabaseEntry(replaceStr.getBytes("UTF-8"));
        cursor.putCurrent(replacementData);
    } catch (Exception e) {
        // Exception handling goes here
    } finally {
       // Make sure to close the cursor
       cursor.close();
    }

Note that this method cannot be used if the record that you are trying to replace is a member of a duplicate set. This is because records must be sorted by their data and replacement would violate that sort order.

If you want to replace the data contained by a duplicate record, delete the record and create a new record with the desired key and data.

Prev | Up | Next
Deleting Records Using Cursors | Home | Cursor Example