### Berkeley DB Reference Guide: Access Methods |

# Retrieving records with a cursor

The DBcursor->c_get function is the standard interface for retrieving records from the database with a cursor. The DBcursor->c_get function takes a flag which controls how the cursor is positioned within the database and returns the key/data item associated with that positioning. Similar to DB->get, DBcursor->c_get may also take a supplied key and retrieve the data associated with that key from the database. There are several flags that you can set to customize retrieval.

### Cursor position flags

DB_FIRST, DB_LAST
  Return the first (last) record from the database.

DB_NEXT, DB_PREV
  Return the record from the database immediately following (preceding) the cursor.

DB_NEXT_DUP
  Return the record from the database immediately following the cursor, if it is a duplicate data item for the current key.

DB_NEXT_NODUP, DB_PREV_NODUP
  Return the next record from the database following (preceding) the cursor that is not a duplicate data item for the current key.

DB_CURRENT
  Return the record from the database currently pointed to by the cursor.

### Retrieving specific key/data pairs

DB_SET
  Return the record from the database that matches the supplied key. In the case of duplicates the first duplicate is returned and the cursor is positioned at the beginning of the duplicate list. The user can then traverse the duplicate entries for the key.

DB_SET_RANGE
  Return the smallest record in the database greater than or equal to the supplied key. This functionality permits partial key matches and range searches.

DB_GET_BOTH
  Return the record from the database that matches both the supplied key and data items. This is particularly useful when there are large numbers of duplicate records for a key, as it allows the cursor to easily be positioned at the correct place for traversal of some part of a large set of duplicate records.

### Retrieving based on record numbers

DB_SET_RECNO
  If the underlying database is a Btree, and was configured so that it is possible to search it by logical record number, retrieve a specific record.

DB_GET_RECNO
  If the underlying database is a Btree, and was configured so that it is possible to search it by logical record number, return the record number for the current cursor record.

### Special-purpose flags

DB_CONSUME
  Read-and-delete: the first record (the head) of the queue is returned and deleted. The underlying database must be a Queue.

DB_RMW
  Read-modify-write: acquire write locks instead of read locks during retrieval. This can enhance performance in threaded applications where deadlock is a concern.

In all cases, the cursor is repositioned by a DBcursor->c_get operation to point to the newly-returned key/data pair in the database.

Copyright Sleepycat Software