如何在 Java 中打开 LMDB 数据库?
How do I open a LMDB database in Java?
我正在尝试使用其 Java API 打开 LMDB 数据库。
这是我的 Database
class:
import java.io.File;
import java.nio.ByteBuffer;
import java.nio.file.Paths;
import org.lmdbjava.Dbi;
import static org.lmdbjava.DbiFlags.MDB_CREATE;
import org.lmdbjava.Env;
import org.lmdbjava.Txn;
public class Database {
private String dbName;
private String dbDirectoryName;
private File dbDirectory;
private Env<ByteBuffer> dbEnvironment;
private Dbi<ByteBuffer> db;
public Database(String _dbDirectoryName, String _dbName) {
dbName = _dbName;
dbDirectoryName = _dbDirectoryName;
dbDirectory = new File(dbDirectoryName);
dbEnvironment = Env.create().setMapSize(1_073_741_824).setMaxDbs(1).open(dbDirectory);
db = dbEnvironment.openDbi(dbName, MDB_CREATE);
}
public void Close() {
dbEnvironment.close();
}
}
我的主要 class:
public class TestApp {
public static void main(String[] args) {
Database db = new Database("./data", "DB.TEST");
}
}
我仔细检查了目录 data
是否存在。
我收到以下错误:
run:
Exception in thread "main" java.lang.NoClassDefFoundError: jnr/ffi/byref/PointerByReference
at org.lmdbjava.Env$Builder.open(Env.java:460)
at org.lmdbjava.Env$Builder.open(Env.java:486)
at database.Database.<init>(Database.java:41)
at TestApp.main(TestApp.java:25)
Caused by: java.lang.ClassNotFoundException: jnr.ffi.byref.PointerByReference
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 4 more
此测试尝试遵循 LMDB Java API:
的现有文档
https://github.com/lmdbjava/lmdbjava/blob/master/src/test/java/org/lmdbjava/TutorialTest.java
很可能您缺少依赖项,或者类路径中缺少包含 jnr.ffi.byref.PointerByReference
class 的 jar 文件。
检查:
https://javarevisited.blogspot.com/2011/08/classnotfoundexception-in-java-example.html
取决于您使用的是哪个工具,将依赖项添加到 pom.xml
或 build.gradle
或将其添加到 classpath。
所需类型在jnr-ffi-[version].jar
。
我正在尝试使用其 Java API 打开 LMDB 数据库。
这是我的 Database
class:
import java.io.File;
import java.nio.ByteBuffer;
import java.nio.file.Paths;
import org.lmdbjava.Dbi;
import static org.lmdbjava.DbiFlags.MDB_CREATE;
import org.lmdbjava.Env;
import org.lmdbjava.Txn;
public class Database {
private String dbName;
private String dbDirectoryName;
private File dbDirectory;
private Env<ByteBuffer> dbEnvironment;
private Dbi<ByteBuffer> db;
public Database(String _dbDirectoryName, String _dbName) {
dbName = _dbName;
dbDirectoryName = _dbDirectoryName;
dbDirectory = new File(dbDirectoryName);
dbEnvironment = Env.create().setMapSize(1_073_741_824).setMaxDbs(1).open(dbDirectory);
db = dbEnvironment.openDbi(dbName, MDB_CREATE);
}
public void Close() {
dbEnvironment.close();
}
}
我的主要 class:
public class TestApp {
public static void main(String[] args) {
Database db = new Database("./data", "DB.TEST");
}
}
我仔细检查了目录 data
是否存在。
我收到以下错误:
run:
Exception in thread "main" java.lang.NoClassDefFoundError: jnr/ffi/byref/PointerByReference
at org.lmdbjava.Env$Builder.open(Env.java:460)
at org.lmdbjava.Env$Builder.open(Env.java:486)
at database.Database.<init>(Database.java:41)
at TestApp.main(TestApp.java:25)
Caused by: java.lang.ClassNotFoundException: jnr.ffi.byref.PointerByReference
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 4 more
此测试尝试遵循 LMDB Java API:
的现有文档https://github.com/lmdbjava/lmdbjava/blob/master/src/test/java/org/lmdbjava/TutorialTest.java
很可能您缺少依赖项,或者类路径中缺少包含 jnr.ffi.byref.PointerByReference
class 的 jar 文件。
检查: https://javarevisited.blogspot.com/2011/08/classnotfoundexception-in-java-example.html
取决于您使用的是哪个工具,将依赖项添加到 pom.xml
或 build.gradle
或将其添加到 classpath。
所需类型在jnr-ffi-[version].jar
。