• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/timemachine/db-4.7.25.NC/docs/collections/tutorial/
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml">
4  <head>
5    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6    <title>
7		Using Tuples with Key Creators
8	</title>
9    <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
10    <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
11    <link rel="home" href="index.html" title="Berkeley DB Collections Tutorial" />
12    <link rel="up" href="Tuple.html" title="Chapter��5.��&#10;&#9;&#9;Using Tuples&#10;&#9;" />
13    <link rel="previous" href="Tuple.html" title="Chapter��5.��&#10;&#9;&#9;Using Tuples&#10;&#9;" />
14    <link rel="next" href="tuplekeybindings.html" title="&#10;&#9;&#9;Creating Tuple Key Bindings&#10;&#9;" />
15  </head>
16  <body>
17    <div class="navheader">
18      <table width="100%" summary="Navigation header">
19        <tr>
20          <th colspan="3" align="center">
21		Using Tuples with Key Creators
22	</th>
23        </tr>
24        <tr>
25          <td width="20%" align="left"><a accesskey="p" href="Tuple.html">Prev</a>��</td>
26          <th width="60%" align="center">Chapter��5.��
27		Using Tuples
28	</th>
29          <td width="20%" align="right">��<a accesskey="n" href="tuplekeybindings.html">Next</a></td>
30        </tr>
31      </table>
32      <hr />
33    </div>
34    <div class="sect1" lang="en" xml:lang="en">
35      <div class="titlepage">
36        <div>
37          <div>
38            <h2 class="title" style="clear: both"><a id="tupleswithkeycreators"></a>
39		Using Tuples with Key Creators
40	</h2>
41          </div>
42        </div>
43        <div></div>
44      </div>
45      <p>
46    Key creators were used in prior examples to extract index keys
47	from value objects. The keys were returned as deserialized key
48	objects, since the serial format was used for keys. In this
49	example, the tuple format is used for keys and the key creators
50	return keys by writing information to a tuple. The differences
51	between this example and the prior example are:
52</p>
53      <div class="itemizedlist">
54        <ul type="disc">
55          <li>
56            <p>
57            The 
58            <a href="../../java/com/sleepycat/bind/serial/TupleSerialKeyCreator.html" target="_top">TupleSerialKeyCreator</a>
59            
60            base class is used instead of the 
61            <a href="../../java/com/sleepycat/bind/serial/SerialSerialKeyCreator.html" target="_top">SerialSerialKeyCreator</a>
62            
63            base class.
64        </p>
65          </li>
66          <li>
67            <p>
68            For all key input and output parameters, the 
69            <a href="../../java/com/sleepycat/bind/tuple/TupleInput.html" target="_top">TupleInput</a>
70            
71            and 
72            <a href="../../java/com/sleepycat/bind/tuple/TupleOutput.html" target="_top">TupleOutput</a>
73            
74            classes are used instead of 
75            <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" target="_top">Object</a>
76            
77            (representing a deserialized object).
78        </p>
79          </li>
80          <li>
81            <p>
82            Instead of returning a key output object, these methods call
83            tuple write methods such as 
84            <a href="../../java/com/sleepycat/bind/tuple/TupleOutput.html#writeString(java.lang.String)" target="_top">TupleOutput.writeString</a>.
85        </p>
86          </li>
87        </ul>
88      </div>
89      <p>
90    In addition to writing key tuples, the
91	<tt class="classname">ShipmentByPartKeyCreator</tt> and
92	<tt class="classname">ShipmentBySupplierKeyCreator</tt> classes also read the key tuple
93	of the primary key. This is because they extract the index key from
94	fields in the Shipment's primary key. Instead of calling getter
95	methods on the <tt class="classname">ShipmentKey</tt> object, as in prior examples,
96	these methods call 
97    <a href="../../java/com/sleepycat/bind/tuple/TupleInput.html#readString()" target="_top">TupleInput.readString</a>.
98	The <tt class="classname">ShipmentKey</tt> consists of two string fields that are read
99	in sequence.
100</p>
101      <p>
102    The modified key creators are shown below:
103	<tt class="classname">SupplierByCityKeyCreator</tt>, 
104    <tt class="classname">ShipmentByPartKeyCreator</tt>
105	and <tt class="classname">ShipmentBySupplierKeyCreator</tt>.
106</p>
107      <a id="tuple_SupplierByCityKeyCreator"></a>
108      <pre class="programlisting"><b class="userinput"><tt>import com.sleepycat.bind.serial.TupleSerialKeyCreator;
109import com.sleepycat.bind.tuple.TupleInput;
110import com.sleepycat.bind.tuple.TupleOutput;
111...</tt></b>
112public class SampleDatabase
113{
114    ...
115    private static class SupplierByCityKeyCreator
116<b class="userinput"><tt>        extends TupleSerialKeyCreator</tt></b>
117    {
118        private SupplierByCityKeyCreator(StoredClassCatalog catalog,
119                                         <b class="userinput"><tt>Class valueClass</tt></b>)
120        {
121            super(catalog, valueClass);
122        }
123
124<b class="userinput"><tt>        public boolean createSecondaryKey(TupleInput primaryKeyInput,
125                                          Object valueInput,
126                                          TupleOutput indexKeyOutput)
127        {
128            SupplierData supplierData = (SupplierData) valueInput;
129            String city = supplierData.getCity();
130            if (city != null) {
131                indexKeyOutput.writeString(supplierData.getCity());
132                return true;
133            } else {
134                return false;
135            }
136        }</tt></b>
137    }
138
139    private static class ShipmentByPartKeyCreator
140        <b class="userinput"><tt>extends TupleSerialKeyCreator</tt></b>
141    {
142        private ShipmentByPartKeyCreator(StoredClassCatalog catalog,
143                                         <b class="userinput"><tt>Class valueClass</tt></b>)
144        {
145            super(catalog, valueClass);
146        }
147
148        <b class="userinput"><tt>public boolean createSecondaryKey(TupleInput primaryKeyInput,
149                                          Object valueInput,
150                                          TupleOutput indexKeyOutput)
151        {
152            String partNumber = primaryKeyInput.readString();
153            // don't bother reading the supplierNumber
154            indexKeyOutput.writeString(partNumber);
155            return true;
156        }</tt></b>
157    }
158
159    private static class ShipmentBySupplierKeyCreator
160        <b class="userinput"><tt>extends TupleSerialKeyCreator</tt></b>
161    {
162        private ShipmentBySupplierKeyCreator(StoredClassCatalog catalog,
163                                             <b class="userinput"><tt>Class valueClass</tt></b>)
164        {
165            super(catalog, valueClass);
166        }
167
168        <b class="userinput"><tt>public boolean createSecondaryKey(TupleInput primaryKeyInput,
169                                          Object valueInput,
170                                          TupleOutput indexKeyOutput)
171        {
172            primaryKeyInput.readString(); // skip the partNumber
173            String supplierNumber = primaryKeyInput.readString();
174            indexKeyOutput.writeString(supplierNumber);
175            return true;
176        }</tt></b>
177    }
178    ...
179}
180	</pre>
181    </div>
182    <div class="navfooter">
183      <hr />
184      <table width="100%" summary="Navigation footer">
185        <tr>
186          <td width="40%" align="left"><a accesskey="p" href="Tuple.html">Prev</a>��</td>
187          <td width="20%" align="center">
188            <a accesskey="u" href="Tuple.html">Up</a>
189          </td>
190          <td width="40%" align="right">��<a accesskey="n" href="tuplekeybindings.html">Next</a></td>
191        </tr>
192        <tr>
193          <td width="40%" align="left" valign="top">Chapter��5.��
194		Using Tuples
195	��</td>
196          <td width="20%" align="center">
197            <a accesskey="h" href="index.html">Home</a>
198          </td>
199          <td width="40%" align="right" valign="top">��
200		Creating Tuple Key Bindings
201	</td>
202        </tr>
203      </table>
204    </div>
205  </body>
206</html>
207