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>Getting Started with Berkeley DB</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="next" href="preface.html" title="Preface" />
11  </head>
12  <body>
13    <div class="navheader">
14      <table width="100%" summary="Navigation header">
15        <tr>
16          <th colspan="3" align="center">Getting Started with Berkeley DB</th>
17        </tr>
18        <tr>
19          <td width="20%" align="left"> </td>
20          <th width="60%" align="center"> </th>
21          <td width="20%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
22        </tr>
23      </table>
24      <hr />
25    </div>
26    <div class="book" lang="en" xml:lang="en">
27      <div class="titlepage">
28        <div>
29          <div>
30            <h1 class="title"><a id="id613798"></a>Getting Started with Berkeley DB</h1>
31          </div>
32          <div>
33            <div class="legalnotice">
34              <p class="legalnotice-title">
35                <b>Legal Notice</b>
36              </p>
37              <p>
38        This documentation is distributed under an open source license.
39        You may review the terms of this license at:
40        <a href="http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicense.html" target="_top">http://www.oracle.com/technology/software/products/berkeley-db/htdocs/oslicense.html</a>
41        
42        
43    </p>
44              <p>
45            Oracle, Berkeley DB,
46            
47            
48            and
49            Sleepycat are trademarks or registered trademarks of
50            Oracle. All rights to these marks are reserved.
51            No third-party use is permitted without the
52            express prior written consent of Oracle.
53    </p>
54              <p>
55        <span class="trademark">Java</span>™ and all Java-based marks are a trademark
56        or registered trademark of Sun Microsystems,
57        Inc, in the United States and other countries.
58    </p>
59              <p>
60        To obtain a copy of this document's original source code, please
61        submit a request to the Oracle Technology Network forum at:
62        <a href="http://forums.oracle.com/forums/forum.jspa?forumID=271" target="_top">http://forums.oracle.com/forums/forum.jspa?forumID=271</a>
63        
64        
65    </p>
66            </div>
67          </div>
68          <div>
69            <p class="pubdate">4/25/2008</p>
70          </div>
71        </div>
72        <div></div>
73        <hr />
74      </div>
75      <div class="toc">
76        <p>
77          <b>Table of Contents</b>
78        </p>
79        <dl>
80          <dt>
81            <span class="preface">
82              <a href="preface.html">Preface</a>
83            </span>
84          </dt>
85          <dd>
86            <dl>
87              <dt>
88                <span class="sect1">
89                  <a href="preface.html#conventions">Conventions Used in this Book</a>
90                </span>
91              </dt>
92              <dd>
93                <dl>
94                  <dt>
95                    <span class="sect2">
96                      <a href="preface.html#moreinfo">For More Information</a>
97                    </span>
98                  </dt>
99                </dl>
100              </dd>
101            </dl>
102          </dd>
103          <dt>
104            <span class="chapter">
105              <a href="introduction.html">1. Introduction to Berkeley DB </a>
106            </span>
107          </dt>
108          <dd>
109            <dl>
110              <dt>
111                <span class="sect1">
112                  <a href="introduction.html#aboutthismanual">About This Manual</a>
113                </span>
114              </dt>
115              <dt>
116                <span class="sect1">
117                  <a href="javadplconcepts.html">Berkeley DB Concepts</a>
118                </span>
119              </dt>
120              <dd>
121                <dl>
122                  <dt>
123                    <span class="sect2">
124                      <a href="javadplconcepts.html#dplenvconcepts">Environments</a>
125                    </span>
126                  </dt>
127                  <dt>
128                    <span class="sect2">
129                      <a href="javadplconcepts.html#key-data">Key-Data Pairs</a>
130                    </span>
131                  </dt>
132                  <dt>
133                    <span class="sect2">
134                      <a href="javadplconcepts.html#storing-intro">Storing Data</a>
135                    </span>
136                  </dt>
137                  <dt>
138                    <span class="sect2">
139                      <a href="javadplconcepts.html#duplicatesintro">Duplicate Data</a>
140                    </span>
141                  </dt>
142                  <dt>
143                    <span class="sect2">
144                      <a href="javadplconcepts.html#replacedeleteIntro">Replacing and Deleting Entries</a>
145                    </span>
146                  </dt>
147                  <dt>
148                    <span class="sect2">
149                      <a href="javadplconcepts.html#secondary">Secondary Keys</a>
150                    </span>
151                  </dt>
152                  <dt>
153                    <span class="sect2">
154                      <a href="javadplconcepts.html#whichapi">Which API Should You Use?</a>
155                    </span>
156                  </dt>
157                </dl>
158              </dd>
159              <dt>
160                <span class="sect1">
161                  <a href="accessmethods.html">Access Methods</a>
162                </span>
163              </dt>
164              <dd>
165                <dl>
166                  <dt>
167                    <span class="sect2">
168                      <a href="accessmethods.html#selectAM">Selecting Access Methods</a>
169                    </span>
170                  </dt>
171                  <dt>
172                    <span class="sect2">
173                      <a href="accessmethods.html#BTreeVSHash">Choosing between BTree and Hash</a>
174                    </span>
175                  </dt>
176                  <dt>
177                    <span class="sect2">
178                      <a href="accessmethods.html#QueueVSRecno">Choosing between Queue and Recno</a>
179                    </span>
180                  </dt>
181                </dl>
182              </dd>
183              <dt>
184                <span class="sect1">
185                  <a href="databaseLimits.html">Database Limits and Portability</a>
186                </span>
187              </dt>
188              <dt>
189                <span class="sect1">
190                  <a href="coreExceptions.html">Exception Handling</a>
191                </span>
192              </dt>
193              <dt>
194                <span class="sect1">
195                  <a href="returns.html">Error Returns</a>
196                </span>
197              </dt>
198              <dt>
199                <span class="sect1">
200                  <a href="gettingit.html">Getting and Using DB </a>
201                </span>
202              </dt>
203            </dl>
204          </dd>
205          <dt>
206            <span class="chapter">
207              <a href="Env.html">2. Database Environments</a>
208            </span>
209          </dt>
210          <dd>
211            <dl>
212              <dt>
213                <span class="sect1">
214                  <a href="Env.html#EnvOpen">Opening Database Environments</a>
215                </span>
216              </dt>
217              <dt>
218                <span class="sect1">
219                  <a href="EnvClose.html">Closing Database Environments</a>
220                </span>
221              </dt>
222              <dt>
223                <span class="sect1">
224                  <a href="EnvProps.html">Environment Properties</a>
225                </span>
226              </dt>
227              <dd>
228                <dl>
229                  <dt>
230                    <span class="sect2">
231                      <a href="EnvProps.html#envconfig">The EnvironmentConfig Class</a>
232                    </span>
233                  </dt>
234                  <dt>
235                    <span class="sect2">
236                      <a href="EnvProps.html#envhandleconfig">EnvironmentMutableConfig</a>
237                    </span>
238                  </dt>
239                </dl>
240              </dd>
241            </dl>
242          </dd>
243          <dt>
244            <span class="part">
245              <a href="dpl.html">I. Programming with the Direct Persistence Layer</a>
246            </span>
247          </dt>
248          <dd>
249            <dl>
250              <dt>
251                <span class="chapter">
252                  <a href="persist_first.html">3. Direct Persistence Layer First Steps</a>
253                </span>
254              </dt>
255              <dd>
256                <dl>
257                  <dt>
258                    <span class="sect1">
259                      <a href="persist_first.html#entitystore">Entity Stores</a>
260                    </span>
261                  </dt>
262                  <dd>
263                    <dl>
264                      <dt>
265                        <span class="sect2">
266                          <a href="persist_first.html#persist-open">Opening and Closing Environments and Stores</a>
267                        </span>
268                      </dt>
269                    </dl>
270                  </dd>
271                  <dt>
272                    <span class="sect1">
273                      <a href="persistobject.html">Persistent Objects</a>
274                    </span>
275                  </dt>
276                  <dt>
277                    <span class="sect1">
278                      <a href="saveret.html">Saving a Retrieving Data</a>
279                    </span>
280                  </dt>
281                </dl>
282              </dd>
283              <dt>
284                <span class="chapter">
285                  <a href="persist_index.html">4. Working with Indices</a>
286                </span>
287              </dt>
288              <dd>
289                <dl>
290                  <dt>
291                    <span class="sect1">
292                      <a href="persist_index.html#dplindexaccess">Accessing Indexes</a>
293                    </span>
294                  </dt>
295                  <dd>
296                    <dl>
297                      <dt>
298                        <span class="sect2">
299                          <a href="persist_index.html#primaryindexaccess">Accessing Primary Indices</a>
300                        </span>
301                      </dt>
302                      <dt>
303                        <span class="sect2">
304                          <a href="persist_index.html#secondaryindexaccess">Accessing Secondary Indices</a>
305                        </span>
306                      </dt>
307                    </dl>
308                  </dd>
309                  <dt>
310                    <span class="sect1">
311                      <a href="dplindexcreate.html">Creating Indexes</a>
312                    </span>
313                  </dt>
314                  <dd>
315                    <dl>
316                      <dt>
317                        <span class="sect2">
318                          <a href="dplindexcreate.html#dplprimaryidxdecl">Declaring a Primary Indexes</a>
319                        </span>
320                      </dt>
321                      <dt>
322                        <span class="sect2">
323                          <a href="dplindexcreate.html#dplsecondaryidxdecl">Declaring Secondary Indexes</a>
324                        </span>
325                      </dt>
326                      <dt>
327                        <span class="sect2">
328                          <a href="dplindexcreate.html#foreignkey">Foreign Key Constraints</a>
329                        </span>
330                      </dt>
331                    </dl>
332                  </dd>
333                </dl>
334              </dd>
335              <dt>
336                <span class="chapter">
337                  <a href="persist_access.html">5. Saving and Retrieving Objects</a>
338                </span>
339              </dt>
340              <dd>
341                <dl>
342                  <dt>
343                    <span class="sect1">
344                      <a href="persist_access.html#simpleentity">A Simple Entity Class</a>
345                    </span>
346                  </dt>
347                  <dt>
348                    <span class="sect1">
349                      <a href="simpleda.html">SimpleDA.class</a>
350                    </span>
351                  </dt>
352                  <dt>
353                    <span class="sect1">
354                      <a href="simpleput.html">Placing Objects in an Entity Store</a>
355                    </span>
356                  </dt>
357                  <dt>
358                    <span class="sect1">
359                      <a href="simpleget.html">Retrieving Objects from an Entity Store</a>
360                    </span>
361                  </dt>
362                  <dt>
363                    <span class="sect1">
364                      <a href="getmultiple.html">Retrieving Multiple Objects</a>
365                    </span>
366                  </dt>
367                  <dd>
368                    <dl>
369                      <dt>
370                        <span class="sect2">
371                          <a href="getmultiple.html#dpl_cursor_initialize">Cursor Initialization</a>
372                        </span>
373                      </dt>
374                      <dt>
375                        <span class="sect2">
376                          <a href="getmultiple.html#dpl_dups">Working with Duplicate Keys</a>
377                        </span>
378                      </dt>
379                      <dt>
380                        <span class="sect2">
381                          <a href="getmultiple.html#dpl_cursor_range">Key Ranges</a>
382                        </span>
383                      </dt>
384                    </dl>
385                  </dd>
386                  <dt>
387                    <span class="sect1">
388                      <a href="dpl_entityjoin.html">Join Cursors</a>
389                    </span>
390                  </dt>
391                  <dt>
392                    <span class="sect1">
393                      <a href="dpl_delete.html">Deleting Entity Objects</a>
394                    </span>
395                  </dt>
396                  <dt>
397                    <span class="sect1">
398                      <a href="dpl_replace.html">Replacing Entity Objects</a>
399                    </span>
400                  </dt>
401                </dl>
402              </dd>
403              <dt>
404                <span class="chapter">
405                  <a href="dpl_example.html">6. A DPL Example</a>
406                </span>
407              </dt>
408              <dd>
409                <dl>
410                  <dt>
411                    <span class="sect1">
412                      <a href="dpl_example.html#vendorclass">Vendor.class</a>
413                    </span>
414                  </dt>
415                  <dt>
416                    <span class="sect1">
417                      <a href="inventoryclass.html">Inventory.class</a>
418                    </span>
419                  </dt>
420                  <dt>
421                    <span class="sect1">
422                      <a href="mydbenv-persist.html">MyDbEnv</a>
423                    </span>
424                  </dt>
425                  <dt>
426                    <span class="sect1">
427                      <a href="dataaccessorclass.html">DataAccessor.class</a>
428                    </span>
429                  </dt>
430                  <dt>
431                    <span class="sect1">
432                      <a href="dpl_exampledatabaseput.html">ExampleDatabasePut.class</a>
433                    </span>
434                  </dt>
435                  <dt>
436                    <span class="sect1">
437                      <a href="dpl_exampleinventoryread.html">ExampleInventoryRead.class</a>
438                    </span>
439                  </dt>
440                </dl>
441              </dd>
442            </dl>
443          </dd>
444          <dt>
445            <span class="part">
446              <a href="baseapi.html">II. Programming with the Base API</a>
447            </span>
448          </dt>
449          <dd>
450            <dl>
451              <dt>
452                <span class="chapter">
453                  <a href="DB.html">7. Databases</a>
454                </span>
455              </dt>
456              <dd>
457                <dl>
458                  <dt>
459                    <span class="sect1">
460                      <a href="DB.html#DBOpen">Opening Databases</a>
461                    </span>
462                  </dt>
463                  <dt>
464                    <span class="sect1">
465                      <a href="coredbclose.html">Closing Databases</a>
466                    </span>
467                  </dt>
468                  <dt>
469                    <span class="sect1">
470                      <a href="DBConfig.html">Database Properties</a>
471                    </span>
472                  </dt>
473                  <dt>
474                    <span class="sect1">
475                      <a href="DBAdmin.html">Administrative Methods</a>
476                    </span>
477                  </dt>
478                  <dt>
479                    <span class="sect1">
480                      <a href="dbErrorReporting.html">Error Reporting Functions</a>
481                    </span>
482                  </dt>
483                  <dt>
484                    <span class="sect1">
485                      <a href="CoreEnvUsage.html">Managing Databases in Environments</a>
486                    </span>
487                  </dt>
488                  <dt>
489                    <span class="sect1">
490                      <a href="CoreJavaUsage.html">Database Example</a>
491                    </span>
492                  </dt>
493                </dl>
494              </dd>
495              <dt>
496                <span class="chapter">
497                  <a href="DBEntry.html">8. Database Records</a>
498                </span>
499              </dt>
500              <dd>
501                <dl>
502                  <dt>
503                    <span class="sect1">
504                      <a href="DBEntry.html#usingDbEntry">Using Database Records</a>
505                    </span>
506                  </dt>
507                  <dt>
508                    <span class="sect1">
509                      <a href="usingDbt.html">Reading and Writing Database Records</a>
510                    </span>
511                  </dt>
512                  <dd>
513                    <dl>
514                      <dt>
515                        <span class="sect2">
516                          <a href="usingDbt.html#databaseWrite">Writing Records to the Database</a>
517                        </span>
518                      </dt>
519                      <dt>
520                        <span class="sect2">
521                          <a href="usingDbt.html#databaseRead">Getting Records from the Database</a>
522                        </span>
523                      </dt>
524                      <dt>
525                        <span class="sect2">
526                          <a href="usingDbt.html#recordDelete">Deleting Records</a>
527                        </span>
528                      </dt>
529                      <dt>
530                        <span class="sect2">
531                          <a href="usingDbt.html#datapersist">Data Persistence</a>
532                        </span>
533                      </dt>
534                    </dl>
535                  </dd>
536                  <dt>
537                    <span class="sect1">
538                      <a href="bindAPI.html">Using the BIND APIs</a>
539                    </span>
540                  </dt>
541                  <dd>
542                    <dl>
543                      <dt>
544                        <span class="sect2">
545                          <a href="bindAPI.html#bindPrimitive">Numerical and String Objects</a>
546                        </span>
547                      </dt>
548                      <dt>
549                        <span class="sect2">
550                          <a href="bindAPI.html#object2dbt">Serializable Complex Objects</a>
551                        </span>
552                      </dt>
553                      <dt>
554                        <span class="sect2">
555                          <a href="bindAPI.html#customTuple">Custom Tuple Bindings</a>
556                        </span>
557                      </dt>
558                    </dl>
559                  </dd>
560                  <dt>
561                    <span class="sect1">
562                      <a href="dbtJavaUsage.html">Database Usage Example</a>
563                    </span>
564                  </dt>
565                </dl>
566              </dd>
567              <dt>
568                <span class="chapter">
569                  <a href="Cursors.html">9. Using Cursors</a>
570                </span>
571              </dt>
572              <dd>
573                <dl>
574                  <dt>
575                    <span class="sect1">
576                      <a href="Cursors.html#openCursor">Opening and Closing Cursors</a>
577                    </span>
578                  </dt>
579                  <dt>
580                    <span class="sect1">
581                      <a href="Positioning.html">Getting Records Using the Cursor</a>
582                    </span>
583                  </dt>
584                  <dd>
585                    <dl>
586                      <dt>
587                        <span class="sect2">
588                          <a href="Positioning.html#cursorsearch">Searching for Records</a>
589                        </span>
590                      </dt>
591                      <dt>
592                        <span class="sect2">
593                          <a href="Positioning.html#getdups">Working with Duplicate Records</a>
594                        </span>
595                      </dt>
596                    </dl>
597                  </dd>
598                  <dt>
599                    <span class="sect1">
600                      <a href="PutEntryWCursor.html">Putting Records Using Cursors</a>
601                    </span>
602                  </dt>
603                  <dt>
604                    <span class="sect1">
605                      <a href="DeleteEntryWCursor.html">Deleting Records Using Cursors</a>
606                    </span>
607                  </dt>
608                  <dt>
609                    <span class="sect1">
610                      <a href="ReplacingEntryWCursor.html">Replacing Records Using Cursors</a>
611                    </span>
612                  </dt>
613                  <dt>
614                    <span class="sect1">
615                      <a href="cursorJavaUsage.html">Cursor Example</a>
616                    </span>
617                  </dt>
618                </dl>
619              </dd>
620              <dt>
621                <span class="chapter">
622                  <a href="indexes.html">10. Secondary Databases</a>
623                </span>
624              </dt>
625              <dd>
626                <dl>
627                  <dt>
628                    <span class="sect1">
629                      <a href="indexes.html#DbAssociate">Opening and Closing Secondary Databases</a>
630                    </span>
631                  </dt>
632                  <dt>
633                    <span class="sect1">
634                      <a href="keyCreator.html">Implementing Key 
635        Creators
636        
637        </a>
638                    </span>
639                  </dt>
640                  <dd>
641                    <dl>
642                      <dt>
643                        <span class="sect2">
644                          <a href="keyCreator.html#multikeys">Working with Multiple Keys</a>
645                        </span>
646                      </dt>
647                    </dl>
648                  </dd>
649                  <dt>
650                    <span class="sect1">
651                      <a href="secondaryProps.html">Secondary Database Properties</a>
652                    </span>
653                  </dt>
654                  <dt>
655                    <span class="sect1">
656                      <a href="readSecondary.html">Reading Secondary Databases</a>
657                    </span>
658                  </dt>
659                  <dt>
660                    <span class="sect1">
661                      <a href="secondaryDelete.html">Deleting Secondary Database Records</a>
662                    </span>
663                  </dt>
664                  <dt>
665                    <span class="sect1">
666                      <a href="secondaryCursor.html">
667        Using Secondary Cursors
668        
669    </a>
670                    </span>
671                  </dt>
672                  <dt>
673                    <span class="sect1">
674                      <a href="joins.html">Database Joins</a>
675                    </span>
676                  </dt>
677                  <dd>
678                    <dl>
679                      <dt>
680                        <span class="sect2">
681                          <a href="joins.html#joinUsage">Using Join Cursors</a>
682                        </span>
683                      </dt>
684                      <dt>
685                        <span class="sect2">
686                          <a href="joins.html#joinconfig">JoinCursor Properties</a>
687                        </span>
688                      </dt>
689                    </dl>
690                  </dd>
691                  <dt>
692                    <span class="sect1">
693                      <a href="javaindexusage.html">Secondary Database Example</a>
694                    </span>
695                  </dt>
696                  <dd>
697                    <dl>
698                      <dt>
699                        <span class="sect2">
700                          <a href="javaindexusage.html#secondaryMyDbs">Opening Secondary Databases with MyDbs</a>
701                        </span>
702                      </dt>
703                      <dt>
704                        <span class="sect2">
705                          <a href="javaindexusage.html#exampleReadJavaSecondaries">Using Secondary Databases with ExampleDatabaseRead</a>
706                        </span>
707                      </dt>
708                    </dl>
709                  </dd>
710                </dl>
711              </dd>
712              <dt>
713                <span class="chapter">
714                  <a href="dbconfig.html">11. Database Configuration</a>
715                </span>
716              </dt>
717              <dd>
718                <dl>
719                  <dt>
720                    <span class="sect1">
721                      <a href="dbconfig.html#pagesize">Setting the Page Size</a>
722                    </span>
723                  </dt>
724                  <dd>
725                    <dl>
726                      <dt>
727                        <span class="sect2">
728                          <a href="dbconfig.html#overflowpages">Overflow Pages</a>
729                        </span>
730                      </dt>
731                      <dt>
732                        <span class="sect2">
733                          <a href="dbconfig.html#Locking">Locking</a>
734                        </span>
735                      </dt>
736                      <dt>
737                        <span class="sect2">
738                          <a href="dbconfig.html#IOEfficiency">IO Efficiency</a>
739                        </span>
740                      </dt>
741                      <dt>
742                        <span class="sect2">
743                          <a href="dbconfig.html#pagesizeAdvice">Page Sizing Advice</a>
744                        </span>
745                      </dt>
746                    </dl>
747                  </dd>
748                  <dt>
749                    <span class="sect1">
750                      <a href="cachesize.html">Selecting the Cache Size</a>
751                    </span>
752                  </dt>
753                  <dt>
754                    <span class="sect1">
755                      <a href="btree.html">BTree Configuration</a>
756                    </span>
757                  </dt>
758                  <dd>
759                    <dl>
760                      <dt>
761                        <span class="sect2">
762                          <a href="btree.html#duplicateRecords">Allowing Duplicate Records</a>
763                        </span>
764                      </dt>
765                      <dt>
766                        <span class="sect2">
767                          <a href="btree.html#comparators">Setting Comparison Functions</a>
768                        </span>
769                      </dt>
770                    </dl>
771                  </dd>
772                </dl>
773              </dd>
774            </dl>
775          </dd>
776        </dl>
777      </div>
778      <div class="list-of-examples">
779        <p>
780          <b>List of Examples</b>
781        </p>
782        <dl>
783          <dt>7.1. <a href="CoreJavaUsage.html#MyDb">MyDbs Class</a></dt>
784          <dt>8.1. <a href="dbtJavaUsage.html#inventoryjava">Inventory.java</a></dt>
785          <dt>8.2. <a href="dbtJavaUsage.html#vendorjava">Vendor.java</a></dt>
786          <dt>8.3. <a href="dbtJavaUsage.html#InventoryJavaBinding">InventoryBinding.java</a></dt>
787          <dt>8.4. <a href="dbtJavaUsage.html#dbsStoredClass">Stored Class Catalog Management with MyDbs</a></dt>
788          <dt>8.5. <a href="dbtJavaUsage.html#EDL">ExampleDatabaseLoad.java</a></dt>
789          <dt>9.1. <a href="cursorJavaUsage.html#EDR">ExampleDatabaseRead.java</a></dt>
790          <dt>10.1. <a href="javaindexusage.html#ItemNameKeyCreator-Java">ItemNameKeyCreator.java</a></dt>
791          <dt>10.2. <a href="javaindexusage.html#mydbsSecondary">SecondaryDatabase Management with MyDbs</a></dt>
792          <dt>10.3. <a href="javaindexusage.html#secondaryWithEDR">SecondaryDatabase usage with ExampleDatabaseRead</a></dt>
793        </dl>
794      </div>
795    </div>
796    <div class="navfooter">
797      <hr />
798      <table width="100%" summary="Navigation footer">
799        <tr>
800          <td width="40%" align="left"> </td>
801          <td width="20%" align="center"> </td>
802          <td width="40%" align="right"> <a accesskey="n" href="preface.html">Next</a></td>
803        </tr>
804        <tr>
805          <td width="40%" align="left" valign="top"> </td>
806          <td width="20%" align="center"> </td>
807          <td width="40%" align="right" valign="top"> Preface</td>
808        </tr>
809      </table>
810    </div>
811  </body>
812</html>
813