`
mengyang
  • 浏览: 266129 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

BerkeleyDB-JE 使用BaseAPI(二)

    博客分类:
  • BDB
 
阅读更多
本篇介绍使用BaseAPI来操作Java简单类型的数据。
首先我们知道JE中的数据库是键值对的集合,那么数据库中的每一条记录都是一个键值对。键和值可以是任何简单类型的对象,也可以是自定义的复杂类型的对象。在JE中是用 DatabaseEntry类来表示键和值的。这个类可以持有任何类型的数据,只要这个数据可以转化为字节数组。
我们现在演示下字符串类型的数据转化为DatabaseEntry
String aKey = "key";
String aData = "data";
try {
    DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));
    DatabaseEntry theData = new DatabaseEntry(aData.getBytes("UTF-8"));
} catch (Exception e) {
    // Exception handling goes here
}

相应的,也可以从DatabaseEntry中获取字符串类型的数据值
byte[] myKey = theKey.getData();
byte[] myData = theData.getData();
String key = new String(myKey, "UTF-8");
String data = new String(myData, "UTF-8");

总之,DatabaseEntry对象就是BaseAPI操作JE的基础,所有的CRUD操作都离不开它。
BaseAPI提供了两种方式来读写数据:
1.使用database.get()和database.put()方法。
2.使用游标。
本篇只介绍第一种方法。
写数据
默认情况下,JE中的记录是根据key值来排序的,如果数据库允许有重复数据,则在重复数据集中还根据data来排序。你可以使用以下几种方法来写数据。
  • Database.put()
  • 这是最常用写数据的方法,如果你的数据库不支持重复数据,当要写入的记录键已存在于数据库中时,则旧的记录会被覆盖。这也是修改数据的一种方式。
  • Database.putNoOverwrite()
  • 这个方法和上面那个方法不同的地方在于,当键已存在于数据库中时,不论数据库是否支持重复数据,都会返回OperationStatus.KEYEXIST,并且新的记录无法写到数据库中。
  • Database.putNoDupData()
  • 当你要写入的记录的键和值都和数据库中某条记录项等时,返回OperationStatus.KEYEXIST,并且新的记录无法写到数据库中。

当你要写入一条记录到数据库中时,你必须把键和值分别转化为DatabaseEntry对象,这意味着你要把键和值从java对象转化成字节数组。
下面演示下写数据。
String aKey = "myFirstKey";
String aData = "myFirstData";
try {
    DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));
    DatabaseEntry theData = new DatabaseEntry(aData.getBytes("UTF-8"));
    myDatabase.put(null, theKey, theData);
} catch (Exception e) {
    // Exception handling goes here
}

读数据
BaseAPI同样提供了几种方法来读取数据库中的记录。
  • Database.get()
  • 根据传来的键来查找记录,若不存在,则返回 OperationStatus.NOTFOUND
  • Database.getSearchBoth()
  • 根据传来的键和值来查找记录,若不存在,则返回 OperationStatus.NOTFOUND

当你要从数据库中读取一条记录时,你必须把DatabaseEntry对象转化为值所对应的对象,这意味着你要用字节数组来构造值。
下面演示读取数据
DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));
DatabaseEntry theData = new DatabaseEntry();
    
// Perform the get.
if (myDatabase.get(null, theKey, theData, LockMode.DEFAULT) ==
    OperationStatus.SUCCESS) {
    // Recreate the data String.
    byte[] retData = theData.getData();
    String foundData = new String(retData, "UTF-8");
    System.out.println("For key: '" + aKey + "' found data: '" + 
                            foundData + "'.");
} else {
    System.out.println("No record found for key '" + aKey + "'.");
}

删除记录
删除数据库中存在的记录也有两种方法:
  • Database.delete()
  • 这个方法可用来删除匹配传进来的键的记录,若数据库支持重复数据,则所有匹配键的记录都会被删除,如果你要删除重复记录集中的一条记录则必须使用游标。
  • Environment.truncateDatabase()
  • 这个方法用来清空数据库中所有的记录。

下面演示删除记录
try {
    String aKey = "myFirstKey";
    DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));
    
    // Perform the deletion. All records that use this key are
    // deleted.
    myDatabase.delete(null, theKey); 
} catch (Exception e) {
    // Exception handling goes here
}

最后要注意的是,当你对数据库做出了改变,实际上改变并没有被立即写入到磁盘中,它仅存在于内存中,有两种方式你可以保证你做出的改变的持久化:
1.使用事务,默认情况下每当事务提交的时候,JE被把变化写入磁盘。
2.如果由于某些原因,你没有使用事务,那你必须在每次变化发生后显示的调用Environment.sync()方法来确保变化被写入到磁盘。实际上在你每次关闭Environment时,JE也会自动的调用Environment.sync()方法。
0
0
分享到:
评论

相关推荐

    BerkeleyDB-JE je-6.0.11

    Oracle BerkeleyDB-JE je-6.0.11

    BerkeleyDB-Core-C-GSG.pdf

    本手册是为初学者及有一定经验的开发者设计的,旨在提供一个全面、系统的指南来帮助读者理解 Berkeley DB 的基本概念、数据库管理、记录操作、游标使用以及二级数据库的实现等方面的知识。此外,手册还详细介绍了...

    Berkeley DB JE-7.0.6

    **Berkeley DB JE 7.0.6:深入理解分布式数据存储** Berkeley DB JE(Java Edition)是Oracle公司提供的一款开源、嵌入式、基于Java的键值对数据库系统。它以其轻量级、高性能和高可用性而受到广泛的青睐,尤其适合...

    Java-Edition-BerkeleyDB-3.1.0.zip_BerkeleyDB

    在Je-3.1.0版本中,BerkeleyDB使用特定的数据库文件格式,这些文件可以在不同平台上进行迁移,确保了跨平台的兼容性。 **7. 性能优化** BerkeleyDB提供了多种性能调优选项,如缓存大小设置、日志文件管理等,...

    BerkeleyDB-Core-Cxx-GSG.rar

    **Berkeley DB (BDB)** 是一款开源的、嵌入式数据库系统,由...通过详读并实践“BerkeleyDB-Core-Cxx-GSG.pdf”中的内容,开发者将能够熟练地在C++项目中集成和使用Berkeley DB,从而实现高效、可靠的数据存储和管理。

    BerkeleyDB-Core-Cxx-GSG.rar_Berkeley DB_berkeley Db cxx

    在C++接口方面,Berkeley DB提供了丰富的类库供开发者使用。例如,`Db`类用于表示数据库对象,`DbEnv`类用于管理数据库环境,而`Dbt`类则用于存储和检索数据库中的数据项。通过这些类,开发者可以方便地进行数据库的...

    db-4.7.25-master_db-4.7.25-master_berkeleydbvxworks_BerkeleyDB_源

    Berkeley DB是一个开源的文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数,而不是像关系数据库那样需要网络通讯、SQL解析等步骤,本文件是早期版本

    BerkeleyDB-Core-JAVA-GSG.pdf

    根据提供的文档信息,“BerkeleyDB-Core-JAVA-GSG.pdf”主要介绍了如何在Java环境中使用Berkeley DB。该文档强调了Berkeley DB作为一种文件类型数据库的优势,包括快速的存取速度和方便的操作特性。 #### 二、...

    BerkeleyDB-0.26

    - 在并发处理方面,Sqlite 使用行级锁定,而 BerkeleyDB 使用多版本并发控制,对于高并发环境,BerkeleyDB 可能表现更好。 总的来说,BerkeleyDB 和 Sqlite 都是优秀的嵌入式数据库解决方案,选择哪一个取决于具体...

    Berkeley DB -- Access Method Configuration_iyangjian200599

    (二) Berkeley DB -- Access Method Configuration_iyangjian2005997_新浪博客.mht

    BerkeleyDB-0.27

    **BerkeleyDB** 是一款强大的、高度可定制的嵌入式数据库系统,广泛应用于各种软件开发,尤其是在需要高效存储和检索数据的场景中。这款数据库系统由Oracle公司开发,最初在1990年由Sleepycat Software推出,因其...

    Berkeley DB4.8以上各版本

    3. **空间效率**:Berkeley DB通常关注内存和磁盘空间的使用效率,4.8版本可能进一步降低了存储开销,从而在资源有限的环境中更高效。 4. **错误处理和恢复**:为了提高系统的健壮性,4.8版本可能增强了错误检测和...

    Berkeley DB -- 入门知识和一个小例子_iyangjian2005997_新浪博客.mht

    Berkeley DB -- 入门知识和一个小例子_iyangjian2005997_新浪博客.mht

    BerkeleyDB Manual C/C++

    《BerkeleyDB Manual C/C++》是一份详尽的官方文档,主要针对使用C和C++语言进行数据库操作的开发者。BerkeleyDB是一款轻量级、高性能的关系型数据库管理系统,常用于嵌入式系统和分布式应用程序。这篇手册将深入...

    berkeley db db-6.1.26.tar.gz

    db-6.1.26.tar.gz berkeley db

    Berkeley DB Java Edition (JE)

    Berkeley DB Java Edition (JE) 官方7.5.11下载版本。 相关介绍 https://blog.csdn.net/hadues/article/details/80854288

    BerkeleyDB_java_jar包

    2. **Java API**:一组接口和类,如`Database`、`DatabaseEntry`和`Transaction`,使得开发者可以使用Java代码与BerkeleyDB进行交互。 3. **示例和文档**:可能包含演示如何使用BerkeleyDB Java API的示例代码,以及...

    Berkeley DB C++编程入门教

    标题“Berkeley DB C++编程入门教程”意味着文档旨在引导读者通过C++语言了解和使用Berkeley DB。这种数据库提供了一个简洁的API,使得开发者可以快速地存储和检索数据,无需复杂的数据库配置或管理。 在描述中提到...

    BerkerleyDb-18.1.40.tar.gz

    二、BerkeleyDB 18.1.40的安装步骤 在Linux或Mac OS X环境下安装BerkeleyDB 18.1.40,首先解压“BerkerleyDb-18.1.40.tar.gz”文件,得到“db-18.1.40”目录。接下来,按照以下步骤进行: 1. **进入解压目录**: ...

Global site tag (gtag.js) - Google Analytics