mirror of
https://github.com/berkeleydb/je.git
synced 2024-11-15 01:46:24 +00:00
272 lines
11 KiB
HTML
272 lines
11 KiB
HTML
|
<?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>ExampleInventoryRead.java</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 Java Edition" />
|
|||
|
<link rel="up" href="dpl_example.html" title="Chapter 6. A DPL Example" />
|
|||
|
<link rel="prev" href="dpl_exampledatabaseput.html" title="ExampleDatabasePut.java" />
|
|||
|
<link rel="next" href="baseapi.html" title="Part II. Programming with the Base API" />
|
|||
|
</head>
|
|||
|
<body>
|
|||
|
<div xmlns="" class="navheader">
|
|||
|
<div class="libver">
|
|||
|
<p>Library Version 12.2.7.5</p>
|
|||
|
</div>
|
|||
|
<table width="100%" summary="Navigation header">
|
|||
|
<tr>
|
|||
|
<th colspan="3" align="center">ExampleInventoryRead.java</th>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td width="20%" align="left"><a accesskey="p" href="dpl_exampledatabaseput.html">Prev</a> </td>
|
|||
|
<th width="60%" align="center">Chapter 6. A DPL Example</th>
|
|||
|
<td width="20%" align="right"> <a accesskey="n" href="baseapi.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="dpl_exampleinventoryread"></a>ExampleInventoryRead.java</h2>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<p>
|
|||
|
<code class="classname">ExampleInventoryRead</code>
|
|||
|
retrieves
|
|||
|
inventory information from our entity store and
|
|||
|
displays it. When it displays each inventory item, it
|
|||
|
also displays the related vendor contact information.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<code class="classname">ExampleInventoryRead</code>
|
|||
|
can do one of two things. If you provide no search
|
|||
|
criteria, it displays all of the inventory items in the
|
|||
|
store. If you provide an item name (using the
|
|||
|
<code class="literal">-s</code> command line switch), then just
|
|||
|
those inventory items using that name are displayed.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
The beginning of our example is almost identical to our
|
|||
|
<code class="classname">ExampleDatabasePut</code>
|
|||
|
example program. We
|
|||
|
repeat that example code here for the sake of
|
|||
|
completeness. For a complete walk-through of it, see
|
|||
|
the previous section (<a class="xref" href="dpl_exampledatabaseput.html" title="ExampleDatabasePut.java">ExampleDatabasePut.java</a>).
|
|||
|
</p>
|
|||
|
<pre class="programlisting">package persist.gettingStarted;
|
|||
|
|
|||
|
import java.io.File;
|
|||
|
import java.io.IOException;
|
|||
|
|
|||
|
import com.sleepycat.je.DatabaseException;
|
|||
|
import com.sleepycat.persist.EntityCursor;
|
|||
|
|
|||
|
public class ExampleInventoryRead {
|
|||
|
|
|||
|
private static File myDbEnvPath =
|
|||
|
new File("/tmp/JEDB");
|
|||
|
|
|||
|
private DataAccessor da;
|
|||
|
|
|||
|
// Encapsulates the database environment.
|
|||
|
private static MyDbEnv myDbEnv = new MyDbEnv();
|
|||
|
|
|||
|
// The item to locate if the -s switch is used
|
|||
|
private static String locateItem;
|
|||
|
|
|||
|
private static void usage() {
|
|||
|
System.out.println("ExampleInventoryRead [-h <env directory>]" +
|
|||
|
"[-s <item to locate>]");
|
|||
|
System.exit(-1);
|
|||
|
}
|
|||
|
|
|||
|
public static void main(String args[]) {
|
|||
|
ExampleInventoryRead eir = new ExampleInventoryRead();
|
|||
|
try {
|
|||
|
eir.run(args);
|
|||
|
} catch (DatabaseException dbe) {
|
|||
|
System.err.println("ExampleInventoryRead: " + dbe.toString());
|
|||
|
dbe.printStackTrace();
|
|||
|
} finally {
|
|||
|
myDbEnv.close();
|
|||
|
}
|
|||
|
System.out.println("All done.");
|
|||
|
}
|
|||
|
|
|||
|
private void run(String args[])
|
|||
|
throws DatabaseException {
|
|||
|
// Parse the arguments list
|
|||
|
parseArgs(args);
|
|||
|
|
|||
|
myDbEnv.setup(myDbEnvPath, // path to the environment home
|
|||
|
true); // is this environment read-only?
|
|||
|
|
|||
|
// Open the data accessor. This is used to retrieve
|
|||
|
// persistent objects.
|
|||
|
da = new DataAccessor(myDbEnv.getEntityStore());
|
|||
|
|
|||
|
// If a item to locate is provided on the command line,
|
|||
|
// show just the inventory items using the provided name.
|
|||
|
// Otherwise, show everything in the inventory.
|
|||
|
if (locateItem != null) {
|
|||
|
showItem();
|
|||
|
} else {
|
|||
|
showAllInventory();
|
|||
|
}
|
|||
|
} </pre>
|
|||
|
<p>
|
|||
|
The first method that we provide is used to show inventory
|
|||
|
items related to a given inventory name. This method is called
|
|||
|
only if an inventory name is passed to
|
|||
|
<code class="classname">ExampleInventoryRead</code>
|
|||
|
via the <code class="literal">-s</code> option. Given the sample data
|
|||
|
that we provide with this example, each matching inventory name
|
|||
|
will result in the display of three inventory objects.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
To display these objects we use the
|
|||
|
<code class="classname">Inventory</code> class'
|
|||
|
<code class="literal">inventoryByName</code> secondary index to retrieve
|
|||
|
an <code class="classname">EntityCursor</code>, and then we iterate
|
|||
|
over the resulting objects using the cursor.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
Notice that this method calls
|
|||
|
<code class="methodname">displayInventoryRecord()</code>
|
|||
|
to display each individual object. We show this
|
|||
|
method a little later in the example.
|
|||
|
</p>
|
|||
|
<pre class="programlisting"> // Shows all the inventory items that exist for a given
|
|||
|
// inventory name.
|
|||
|
private void showItem() throws DatabaseException {
|
|||
|
|
|||
|
// Use the inventory name secondary key to retrieve
|
|||
|
// these objects.
|
|||
|
EntityCursor<Inventory> items =
|
|||
|
da.inventoryByName.subIndex(locateItem).entities();
|
|||
|
try {
|
|||
|
for (Inventory item : items) {
|
|||
|
displayInventoryRecord(item);
|
|||
|
}
|
|||
|
} finally {
|
|||
|
items.close();
|
|||
|
}
|
|||
|
} </pre>
|
|||
|
<p>
|
|||
|
Next we implement <code class="methodname">showAllInventory()</code>,
|
|||
|
which shows all of the <code class="classname">Inventory</code>
|
|||
|
objects in the store. To do this, we
|
|||
|
obtain an <code class="classname">EntityCursor</code>
|
|||
|
from the <code class="classname">Inventory</code> class'
|
|||
|
primary index and, again, we iterate using that cursor.
|
|||
|
</p>
|
|||
|
<pre class="programlisting"> // Displays all the inventory items in the store
|
|||
|
private void showAllInventory()
|
|||
|
throws DatabaseException {
|
|||
|
|
|||
|
// Get a cursor that will walk every
|
|||
|
// inventory object in the store.
|
|||
|
EntityCursor<Inventory> items =
|
|||
|
da.inventoryBySku.entities();
|
|||
|
|
|||
|
try {
|
|||
|
for (Inventory item : items) {
|
|||
|
displayInventoryRecord(item);
|
|||
|
}
|
|||
|
} finally {
|
|||
|
items.close();
|
|||
|
}
|
|||
|
} </pre>
|
|||
|
<p>
|
|||
|
Now we implement
|
|||
|
<code class="methodname">displayInventoryRecord()</code>. This
|
|||
|
uses the getter methods on the <code class="classname">Inventory</code>
|
|||
|
class to obtain the information that we want to display.
|
|||
|
The only thing interesting about this method is that we
|
|||
|
obtain <code class="classname">Vendor</code> objects within.
|
|||
|
The vendor objects are retrieved <code class="classname">Vendor</code>
|
|||
|
objects using their primary index. We get the key
|
|||
|
for the retrieval from the <code class="classname">Inventory</code>
|
|||
|
object that we are displaying at the time.
|
|||
|
</p>
|
|||
|
<pre class="programlisting"> private void displayInventoryRecord(Inventory theInventory)
|
|||
|
throws DatabaseException {
|
|||
|
|
|||
|
System.out.println(theInventory.getSku() + ":");
|
|||
|
System.out.println("\t " + theInventory.getItemName());
|
|||
|
System.out.println("\t " + theInventory.getCategory());
|
|||
|
System.out.println("\t " + theInventory.getVendor());
|
|||
|
System.out.println("\t\tNumber in stock: " +
|
|||
|
theInventory.getVendorInventory());
|
|||
|
System.out.println("\t\tPrice per unit: " +
|
|||
|
theInventory.getVendorPrice());
|
|||
|
System.out.println("\t\tContact: ");
|
|||
|
|
|||
|
Vendor theVendor =
|
|||
|
da.vendorByName.get(theInventory.getVendor());
|
|||
|
assert theVendor != null;
|
|||
|
|
|||
|
System.out.println("\t\t " + theVendor.getAddress());
|
|||
|
System.out.println("\t\t " + theVendor.getCity() + ", " +
|
|||
|
theVendor.getState() + " " + theVendor.getZipcode());
|
|||
|
System.out.println("\t\t Business Phone: " +
|
|||
|
theVendor.getBusinessPhoneNumber());
|
|||
|
System.out.println("\t\t Sales Rep: " +
|
|||
|
theVendor.getRepName());
|
|||
|
System.out.println("\t\t " +
|
|||
|
theVendor.getRepPhoneNumber());
|
|||
|
} </pre>
|
|||
|
<p>
|
|||
|
The last remaining parts of the example are used to parse
|
|||
|
the command line. This is not very
|
|||
|
interesting for our purposes here, but we show it anyway
|
|||
|
for the sake of completeness.
|
|||
|
</p>
|
|||
|
<pre class="programlisting"> protected ExampleInventoryRead() {}
|
|||
|
|
|||
|
private static void parseArgs(String args[]) {
|
|||
|
for(int i = 0; i < args.length; ++i) {
|
|||
|
if (args[i].startsWith("-")) {
|
|||
|
switch(args[i].charAt(1)) {
|
|||
|
case 'h':
|
|||
|
myDbEnvPath = new File(args[++i]);
|
|||
|
break;
|
|||
|
case 's':
|
|||
|
locateItem = args[++i];
|
|||
|
break;
|
|||
|
default:
|
|||
|
usage();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
} </pre>
|
|||
|
</div>
|
|||
|
<div class="navfooter">
|
|||
|
<hr />
|
|||
|
<table width="100%" summary="Navigation footer">
|
|||
|
<tr>
|
|||
|
<td width="40%" align="left"><a accesskey="p" href="dpl_exampledatabaseput.html">Prev</a> </td>
|
|||
|
<td width="20%" align="center">
|
|||
|
<a accesskey="u" href="dpl_example.html">Up</a>
|
|||
|
</td>
|
|||
|
<td width="40%" align="right"> <a accesskey="n" href="baseapi.html">Next</a></td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td width="40%" align="left" valign="top">ExampleDatabasePut.java </td>
|
|||
|
<td width="20%" align="center">
|
|||
|
<a accesskey="h" href="index.html">Home</a>
|
|||
|
</td>
|
|||
|
<td width="40%" align="right" valign="top"> Part II. Programming with the Base API</td>
|
|||
|
</tr>
|
|||
|
</table>
|
|||
|
</div>
|
|||
|
</body>
|
|||
|
</html>
|