AccessExample.java [plain text]
package com.sleepycat.examples.bdb.access;
import java.lang.*;
import java.io.*;
import java.util.*;
import com.sleepycat.db.*;
import com.sleepycat.bdb.*;
import com.sleepycat.bdb.bind.*;
import com.sleepycat.bdb.collection.*;
public class AccessExample
implements Runnable {
private static boolean create = true;
private static final int EXIT_SUCCESS = 0;
private static final int EXIT_FAILURE = 1;
public static void usage() {
System.out.println("usage: java " +
"com.sleepycat.examples.bdb.access.AccessExample [-r] [database]\n");
System.exit(EXIT_FAILURE);
}
public static void main(String[] argv) {
boolean removeExistingDatabase = false;
String databaseName = "access.db";
for (int i = 0; i < argv.length; i++) {
if (argv[i].equals("-r")) {
removeExistingDatabase = true;
} else if (argv[i].equals("-?")) {
usage();
} else if (argv[i].startsWith("-")) {
usage();
} else {
if ((argv.length - i) != 1)
usage();
databaseName = argv[i];
break;
}
}
try {
if (removeExistingDatabase)
new File(databaseName).delete();
int envFlags = Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL;
if (create) {
envFlags |= Db.DB_CREATE;
}
if (!removeExistingDatabase) {
envFlags |= Db.DB_RECOVER;
}
DbEnv env = new DbEnv(0);
env.open(".", envFlags, 0);
AccessExample app = new AccessExample(env, databaseName);
app.run();
} catch (DbException e) {
System.err.println("AccessExample: " + e.toString());
System.exit(1);
} catch (FileNotFoundException e) {
System.err.println("AccessExample: " + e.toString());
System.exit(1);
} catch (Exception e) {
System.err.println("AccessExample: " + e.toString());
System.exit(1);
}
System.exit(0);
}
private DataStore store;
private SortedMap map;
private DbEnv env;
public AccessExample(DbEnv env, String databaseName)
throws Exception {
this.env = env;
ByteArrayFormat keyFormat = new ByteArrayFormat();
ByteArrayBinding keyBinding = new ByteArrayBinding(keyFormat);
ByteArrayFormat valueFormat = new ByteArrayFormat();
ByteArrayBinding valueBinding = new ByteArrayBinding(valueFormat);
int dbFlags = Db.DB_AUTO_COMMIT;
if (create) {
dbFlags |= Db.DB_CREATE;
}
Db db = new Db(env, 0);
db.open(null, databaseName, null, Db.DB_BTREE, dbFlags, 0);
this.store = new DataStore(db, keyFormat, valueFormat, null);
this.map = new StoredSortedMap(store, keyBinding, valueBinding, true);
}
public void run() {
final InputStreamReader reader = new InputStreamReader(System.in);
for (; ; ) {
final String line = askForLine(reader, System.out, "input> ");
if (line == null) {
break;
}
final String reversed =
(new StringBuffer(line)).reverse().toString();
log("adding: \"" +
line + "\" : \"" +
reversed + "\"");
TransactionRunner tr = new TransactionRunner(env);
try {
tr.run(
new TransactionWorker() {
public void doWork() {
if (!map.containsKey(line.getBytes()))
map.put(line.getBytes(), reversed.getBytes());
else
System.out.println("Key " + line +
" already exists.");
}
});
} catch (com.sleepycat.db.DbException e) {
System.err.println("AccessExample: " + e.toString());
System.exit(1);
} catch (java.lang.Exception e) {
System.err.println("AccessExample: " + e.toString());
System.exit(1);
}
}
System.out.println("");
Iterator iter = map.entrySet().iterator();
try {
System.out.println("Reading data");
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
log("found \"" +
new String((byte[]) entry.getKey()) +
"\" key with value \"" +
new String((byte[]) entry.getValue()) + "\"");
}
} finally {
StoredIterator.close(iter);
}
}
String askForLine(InputStreamReader reader, PrintStream out,
String prompt) {
String result = "";
while (result != null && result.length() == 0) {
out.print(prompt);
out.flush();
result = getLine(reader);
}
return result;
}
String getLine(InputStreamReader reader) {
StringBuffer b = new StringBuffer();
int c;
try {
while ((c = reader.read()) != -1 && c != '\n') {
if (c != '\r') {
b.append((char) c);
}
}
} catch (IOException ioe) {
c = -1;
}
if (c == -1 && b.length() == 0) {
return null;
} else {
return b.toString();
}
}
private void log(String s) {
System.out.println(s);
System.out.flush();
}
}