Scala 在LMDB中检索密钥

Scala 在LMDB中检索密钥,scala,lmdb,Scala,Lmdb,我想从scala代码访问lmdb中的密钥,如下所示: val file = new File("test.txt") val createEnv = create().setMapSize(10485760).setMaxDbs(1) val env = createEnv.open(file,MDB_NOSUBDIR) val db = env.openDbi(LMDBMain.DB_NAME, MDB_CREATE) //define key ,val pa

我想从scala代码访问lmdb中的密钥,如下所示:

 val file = new File("test.txt")
    val createEnv = create().setMapSize(10485760).setMaxDbs(1)
    val env = createEnv.open(file,MDB_NOSUBDIR)
    val db = env.openDbi(LMDBMain.DB_NAME, MDB_CREATE)
    //define key ,val pair 
    val key = allocateDirect(env.getMaxKeySize)
    val value = allocateDirect(700)
    //insert to db
    key.put("Greeting".getBytes(UTF_8)).flip
    value.put("Hello World".getBytes(UTF_8)).flip
    db.put(key, value)
    //fetching data 
    val txn = env.txnRead
    try {
      val fetchedKey : ByteBuffer = db.get(txn,key)
      val fetchedVal : ByteBuffer = txn.`val`()
      println(UTF_8.decode(fetchedVal).toString())
      println(UTF_8.decode(fetchedKey).toString())
      txn.commit()
    } finally if (txn != null) txn.close()
输出为:

HelloWorld
为什么我在输出中看不到
问候语
!!
你知道我怎么才能拿到钥匙吗

就像在每个map实现中一样,为了访问密钥,您需要迭代它们:

try (CursorIterator<ByteBuffer> it = db.iterate(txn, KeyRange.all())) {
    for (final KeyVal<ByteBuffer> kv : it.iterable()) {
      println(UTF_8.decode(kv.key()).toString())
    }
}
try(CursorIterator it=db.iterate(txn,KeyRange.all()){
for(最终KeyVal kv:it.iterable()){
println(UTF_8.decode(kv.key()).toString())
}
}
您可以在代码示例中看到更多示例