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>Chapter 3. Database Records</title>
7    <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
8    <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
9    <link rel="home" href="index.html" title="Getting Started with Berkeley DB" />
10    <link rel="up" href="index.html" title="Getting Started with Berkeley DB" />
11    <link rel="previous" href="CoreDbUsage.html" title="Database Example" />
12    <link rel="next" href="usingDbt.html" title="Reading and Writing Database Records" />
13  </head>
14  <body>
15    <div class="navheader">
16      <table width="100%" summary="Navigation header">
17        <tr>
18          <th colspan="3" align="center">Chapter 3. Database Records</th>
19        </tr>
20        <tr>
21          <td width="20%" align="left"><a accesskey="p" href="CoreDbUsage.html">Prev</a> </td>
22          <th width="60%" align="center"> </th>
23          <td width="20%" align="right"> <a accesskey="n" href="usingDbt.html">Next</a></td>
24        </tr>
25      </table>
26      <hr />
27    </div>
28    <div class="chapter" lang="en" xml:lang="en">
29      <div class="titlepage">
30        <div>
31          <div>
32            <h2 class="title"><a id="DBEntry"></a>Chapter 3. Database Records</h2>
33          </div>
34        </div>
35        <div></div>
36      </div>
37      <div class="toc">
38        <p>
39          <b>Table of Contents</b>
40        </p>
41        <dl>
42          <dt>
43            <span class="sect1">
44              <a href="DBEntry.html#usingDbEntry">Using Database Records</a>
45            </span>
46          </dt>
47          <dt>
48            <span class="sect1">
49              <a href="usingDbt.html">Reading and Writing Database Records</a>
50            </span>
51          </dt>
52          <dd>
53            <dl>
54              <dt>
55                <span class="sect2">
56                  <a href="usingDbt.html#databaseWrite">Writing Records to the Database</a>
57                </span>
58              </dt>
59              <dt>
60                <span class="sect2">
61                  <a href="usingDbt.html#CoreDatabaseRead">Getting Records from the Database</a>
62                </span>
63              </dt>
64              <dt>
65                <span class="sect2">
66                  <a href="usingDbt.html#recordDelete">Deleting Records</a>
67                </span>
68              </dt>
69              <dt>
70                <span class="sect2">
71                  <a href="usingDbt.html#datapersist">Data Persistence</a>
72                </span>
73              </dt>
74            </dl>
75          </dd>
76          <dt>
77            <span class="sect1">
78              <a href="cstructs.html">Using C Structures with DB</a>
79            </span>
80          </dt>
81          <dd>
82            <dl>
83              <dt>
84                <span class="sect2">
85                  <a href="cstructs.html#cstructdynamic">C Structures with Pointers</a>
86                </span>
87              </dt>
88            </dl>
89          </dd>
90          <dt>
91            <span class="sect1">
92              <a href="DbUsage.html">Database Usage Example</a>
93            </span>
94          </dt>
95        </dl>
96      </div>
97      <p>
98      DB records contain two parts — a key and some data. Both the key
99    and its corresponding data are 
100      encapsulated in
101           
102          <span><tt class="classname">DBT</tt> structures.</span> 
103           
104    Therefore, to access a DB record, you need two such
105        <span>structures,</span>
106         one for the key and
107        one for the data.
108  </p>
109      <p>
110    <tt class="classname">DBT</tt> structures provide a <tt class="literal">void *</tt>
111    field that you use to point to your data, and another field that identifies
112    the data length.  They can therefore be used to store anything from simple
113    primitive data to complex structures so long as the information you want to
114    store resides in a single contiguous block of memory.
115  </p>
116      <p>
117    This chapter describes 
118    <tt class="classname">DBT</tt> 
119     
120    usage. It also 
121    introduces storing and retrieving key/value pairs from a database. 
122  </p>
123      <div class="sect1" lang="en" xml:lang="en">
124        <div class="titlepage">
125          <div>
126            <div>
127              <h2 class="title" style="clear: both"><a id="usingDbEntry"></a>Using Database Records</h2>
128            </div>
129          </div>
130          <div></div>
131        </div>
132        <p>
133        Each database record is comprised of two 
134        
135        <span><tt class="classname">DBT</tt> structures</span>
136        
137        — one for the key and another for the data. 
138
139        
140    </p>
141        <p>
142        To store a database record where the key and/or the data are primitive
143        data (<tt class="literal">int</tt>, <tt class="literal">float</tt>, and so forth),
144        or where the key and/or the data contain an array, we need only to point
145        to the memory location where that data resides and identify its
146        length. For example:
147    </p>
148        <a id="c_dbt1"></a>
149        <pre class="programlisting">#include &lt;db.h&gt;
150#include &lt;string.h&gt;
151
152...
153
154DBT key, data;
155float money = 122.45;
156char *description = "Grocery bill.";
157
158/* Zero out the DBTs before using them. */
159memset(&amp;key, 0, sizeof(DBT));
160memset(&amp;data, 0, sizeof(DBT));
161
162key.data = &amp;money;
163key.size = sizeof(float);
164
165data.data = description;
166data.size = strlen(description) + 1; </pre>
167        <p>
168    To retrieve the record, simply assign the <tt class="literal">void *</tt> returned in the 
169    <tt class="methodname">DBT</tt>
170    
171    to the appropriate variable.
172</p>
173        <p>
174    Note that in the following example we do not allow DB to assign the
175    memory for the retrieval of the money value. The reason why is that some
176    systems may require float values to have a specific alignment, and the
177    memory as returned by DB
178    may not be properly aligned (the same problem may exist for structures
179    on some systems). We tell DB to use our memory instead of its
180    own by specifying the <tt class="literal">DB_DBT_USERMEM</tt> flag. Be aware that
181    when we do this, we must also identify how much user memory is available 
182    through the use of the <tt class="literal">ulen</tt> field.
183</p>
184        <a id="c_dbt2"></a>
185        <pre class="programlisting">#include &lt;db.h&gt;
186#include &lt;string.h&gt;
187
188...
189
190float money;
191DBT key, data;
192char *description;
193
194/* Initialize the DBTs */
195memset(&amp;key, 0, sizeof(DBT));
196memset(&amp;data, 0, sizeof(DBT));
197
198key.data = &amp;money;
199key.ulen = sizeof(float);
200key.flags = DB_DBT_USERMEM;
201
202/* Database retrieval code goes here */
203
204/* 
205 * Money is set into the memory that we supplied.
206 */
207description = data.data;</pre>
208      </div>
209    </div>
210    <div class="navfooter">
211      <hr />
212      <table width="100%" summary="Navigation footer">
213        <tr>
214          <td width="40%" align="left"><a accesskey="p" href="CoreDbUsage.html">Prev</a> </td>
215          <td width="20%" align="center">
216            <a accesskey="u" href="index.html">Up</a>
217          </td>
218          <td width="40%" align="right"> <a accesskey="n" href="usingDbt.html">Next</a></td>
219        </tr>
220        <tr>
221          <td width="40%" align="left" valign="top">Database Example </td>
222          <td width="20%" align="center">
223            <a accesskey="h" href="index.html">Home</a>
224          </td>
225          <td width="40%" align="right" valign="top"> Reading and Writing Database Records</td>
226        </tr>
227      </table>
228    </div>
229  </body>
230</html>
231