summaryrefslogtreecommitdiff
path: root/docs/gsg/JAVA/secondaryCursor.html
blob: d6b970bfc63d369b6abe23ed93f40629194a1971 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Using Secondary Cursors</title>
    <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
    <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
    <link rel="start" href="index.html" title="Getting Started with Berkeley DB" />
    <link rel="up" href="indexes.html" title="Chapter 10. Secondary Databases" />
    <link rel="prev" href="secondaryDelete.html" title="Deleting Secondary Database Records" />
    <link rel="next" href="joins.html" title="Database Joins" />
  </head>
  <body>
    <div xmlns="" class="navheader">
      <div class="libver">
        <p>Library Version 12.1.6.1</p>
      </div>
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center">
        <span xmlns="http://www.w3.org/1999/xhtml">Using Secondary Cursors</span>
        
    </th>
        </tr>
        <tr>
          <td width="20%" align="left"><a accesskey="p" href="secondaryDelete.html">Prev</a> </td>
          <th width="60%" align="center">Chapter 10. Secondary Databases</th>
          <td width="20%" align="right"> <a accesskey="n" href="joins.html">Next</a></td>
        </tr>
      </table>
      <hr />
    </div>
    <div class="sect1" lang="en" xml:lang="en">
      <div class="titlepage">
        <div>
          <div>
            <h2 class="title" style="clear: both"><a id="secondaryCursor"></a>
        <span>Using Secondary Cursors</span>
        
    </h2>
          </div>
        </div>
      </div>
      <p>
        Just like cursors on a primary database, you can use 
            <span>secondary cursors</span> 
             
        to iterate over the records in a secondary database. Like

         <span>normal cursors,</span> 
          
        
        you can also use 
         <span>secondary cursors</span> 
          
        to search for specific records in a database, to seek to the first 
        or last record in the database, to get the next duplicate record, 
            
        and so forth. For a complete description on cursors and their capabilities, see
        <a class="xref" href="Cursors.html" title="Chapter 9. Using Cursors">Using Cursors</a>.
    </p>
      <p>
        However, when you use 
            <span>secondary cursors:</span> 
             
    </p>
      <div class="itemizedlist">
        <ul type="disc">
          <li>
            <p>
            Any data returned is the data contained on the primary database
            record referenced by the secondary record.
        </p>
          </li>
          <li>
            <p>
            <code class="methodname">SecondaryCursor.getSearchBoth()</code> and
            related methods do not search based on a key/data pair. Instead, you
            search based on a secondary key and a primary key. The data returned
            is the primary data that most closely matches the two keys provided
            for the search.
        </p>
          </li>
        </ul>
      </div>
      <p>
        For example, suppose you are using the databases, classes, and key
        <span>creators</span>
        
        described in <a class="xref" href="keyCreator.html" title="Implementing Key Creators">Implementing Key 
        <span>Creators</span>
        
        </a>. 
        Then the following searches for a person's
        name in the secondary database, and deletes all secondary and primary
        records that use that name.
    </p>
      <a id="java_index8"></a>
      <pre class="programlisting">package db.GettingStarted;

import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.LockMode;
import com.sleepycat.db.OperationStatus;
import com.sleepycat.db.SecondaryDatabase;
import com.sleepycat.db.SecondaryCursor;
  
...
try {
    SecondaryDatabase mySecondaryDatabase = null;
    // Database opens omitted for brevity
    ...

    String secondaryName = "John Doe";
    DatabaseEntry secondaryKey = 
        new DatabaseEntry(secondaryName.getBytes("UTF-8"));

    DatabaseEntry foundData = new DatabaseEntry();

    SecondaryCursor mySecCursor = 
        mySecondaryDatabase.openSecondaryCursor(null, null);

    OperationStatus retVal = mySecCursor.getSearchKey(secondaryKey, 
                                                  foundData, 
                                                  LockMode.DEFAULT);
    while (retVal == OperationStatus.SUCCESS) {
        mySecCursor.delete();
        retVal = mySecCursor.getNextDup(secondaryKey, 
                                        foundData, 
                                        LockMode.DEFAULT);
    } 
} catch (Exception e) {
    // Exception handling goes here
}</pre>
    </div>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left"><a accesskey="p" href="secondaryDelete.html">Prev</a> </td>
          <td width="20%" align="center">
            <a accesskey="u" href="indexes.html">Up</a>
          </td>
          <td width="40%" align="right"> <a accesskey="n" href="joins.html">Next</a></td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">Deleting Secondary Database Records </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">Home</a>
          </td>
          <td width="40%" align="right" valign="top"> Database Joins</td>
        </tr>
      </table>
    </div>
  </body>
</html>