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.DatabaseEntry;
import com.sleepycat.je.Database;
import com.sleepycat.je.Cursor;
import com.sleepycat.je.OperationStatus; 
import com.sleepycat.je.LockMode;

...

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 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);
    cursor.putCurrent(replacementData);
} catch (Exception e) {
    // Exception handling goes here
}

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.