本篇继续介绍游标的使用,使用游标来增删改记录
一.增加记录当你使用游标来插入记录的时候,游标将位于插入的记录的位置。游标提供了下面几个API来插入记录。
- Cursor.put() 插入一条记录,如果记录的key值已存在于数据库中,当数据库不支持重复记录时,旧的记录会被替换;否则会插入一条重复记录。
- Cursor.putNoDupData() 当要插入的记录键和值都存在的时候,则返回OperationStatus.KEYEXIST,并且新记录无法插入。
- Cursor.putNoOverwrite() 当要插入的记录的键已存在的时候,则返回OperationStatus.KEYEXIST,并且新记录无法插入。
你可能会发现这三个API和之前讲的用Database插入记录的API非常相像。下面演示使用游标来插入记录:
Cursor cursor = null;
try {
...
// Database and environment open omitted for brevity
...
DatabaseEntry key1 = new DatabaseEntry(key1str.getBytes("UTF-8"));
DatabaseEntry data1 = new DatabaseEntry(data1str.getBytes("UTF-8"));
DatabaseEntry key2 = new DatabaseEntry(key2str.getBytes("UTF-8"));
DatabaseEntry data2 = new DatabaseEntry(data2str.getBytes("UTF-8"));
DatabaseEntry data3 = new DatabaseEntry(data3str.getBytes("UTF-8"));
// Open a cursor using a database handle
cursor = myDatabase.openCursor(null, null);
// Assuming an empty database.
OperationStatus retVal = cursor.put(key1, data1); // SUCCESS
retVal = cursor.put(key2, data2); // SUCCESS
retVal = cursor.put(key2, data3); // SUCCESS if dups allowed,
// KEYEXIST if not.
} catch (Exception e) {
// Exception handling goes here
} finally {
// Make sure to close the cursor
cursor.close();
}
二.删除记录使用Cursor.delete()可以删除当前游标定位的记录。但是要注意的一点是当你删除了一条记录,Cursor.getCurrent()仍是指向刚删除的记录,如果这时你再次调用Cursor.delete()将会报错。
Cursor cursor = null;
try {
...
// Database and environment open omitted for brevity
...
// Create DatabaseEntry objects
// searchKey is some String.
DatabaseEntry theKey = new DatabaseEntry(searchKey.getBytes("UTF-8"));
DatabaseEntry theData = new DatabaseEntry();
// Open a cursor using a database handle
cursor = myDatabase.openCursor(null, null);
// Position the cursor. Ignoring the return value for clarity
OperationStatus retVal = cursor.getSearchKey(theKey, theData,
LockMode.DEFAULT);
// Count the number of records using the given key. If there is only
// one, delete that record.
if (cursor.count() == 1) {
System.out.println("Deleting " +
new String(theKey.getData(), "UTF-8") +
"|" +
new String(theData.getData(), "UTF-8"));
cursor.delete();
}
} catch (Exception e) {
// Exception handling goes here
} finally {
// Make sure to close the cursor
cursor.close();
}
三.替换记录使用Cursor.putCurrent()可以替换当前记录。但是要注意的是使用这个方法不能替换重复记录集中的数据,这是因为重复记录集中的数据是会根据值来排序,你插入的记录值有可能会违反这个排序规则。
Cursor cursor = null;
try {
...
// Database and environment open omitted for brevity
...
// Create DatabaseEntry objects
// searchKey is some String.
DatabaseEntry theKey = new DatabaseEntry(searchKey.getBytes("UTF-8"));
DatabaseEntry theData = new DatabaseEntry();
// Open a cursor using a database handle
cursor = myDatabase.openCursor(null, null);
// Position the cursor. Ignoring the return value for clarity
OperationStatus retVal = cursor.getSearchKey(theKey, theData,
LockMode.DEFAULT);
// Replacement data
String replaceStr = "My replacement string";
DatabaseEntry replacementData =
new DatabaseEntry(replaceStr.getBytes("UTF-8"));
cursor.putCurrent(replacementData);
} catch (Exception e) {
// Exception handling goes here
} finally {
// Make sure to close the cursor
cursor.close();
}
分享到:
相关推荐
Oracle BerkeleyDB-JE je-6.0.11
本手册是为初学者及有一定经验的开发者设计的,旨在提供一个全面、系统的指南来帮助读者理解 Berkeley DB 的基本概念、数据库管理、记录操作、游标使用以及二级数据库的实现等方面的知识。此外,手册还详细介绍了...
**Berkeley DB JE 7.0.6:深入理解分布式数据存储** Berkeley DB JE(Java Edition)是Oracle公司提供的一款开源、嵌入式、基于Java的键值对数据库系统。它以其轻量级、高性能和高可用性而受到广泛的青睐,尤其适合...
在Je-3.1.0版本中,BerkeleyDB使用特定的数据库文件格式,这些文件可以在不同平台上进行迁移,确保了跨平台的兼容性。 **7. 性能优化** BerkeleyDB提供了多种性能调优选项,如缓存大小设置、日志文件管理等,...
**Berkeley DB (BDB)** 是一款开源的、嵌入式数据库系统,由...通过详读并实践“BerkeleyDB-Core-Cxx-GSG.pdf”中的内容,开发者将能够熟练地在C++项目中集成和使用Berkeley DB,从而实现高效、可靠的数据存储和管理。
在C++接口方面,Berkeley DB提供了丰富的类库供开发者使用。例如,`Db`类用于表示数据库对象,`DbEnv`类用于管理数据库环境,而`Dbt`类则用于存储和检索数据库中的数据项。通过这些类,开发者可以方便地进行数据库的...
Berkeley DB是一个开源的文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数,而不是像关系数据库那样需要网络通讯、SQL解析等步骤,本文件是早期版本
根据提供的文档信息,“BerkeleyDB-Core-JAVA-GSG.pdf”主要介绍了如何在Java环境中使用Berkeley DB。该文档强调了Berkeley DB作为一种文件类型数据库的优势,包括快速的存取速度和方便的操作特性。 #### 二、...
- 在并发处理方面,Sqlite 使用行级锁定,而 BerkeleyDB 使用多版本并发控制,对于高并发环境,BerkeleyDB 可能表现更好。 总的来说,BerkeleyDB 和 Sqlite 都是优秀的嵌入式数据库解决方案,选择哪一个取决于具体...
**BerkeleyDB** 是一款强大的、高度可定制的嵌入式数据库系统,广泛应用于各种软件开发,尤其是在需要高效存储和检索数据的场景中。这款数据库系统由Oracle公司开发,最初在1990年由Sleepycat Software推出,因其...
(二) Berkeley DB -- Access Method Configuration_iyangjian2005997_新浪博客.mht
3. **空间效率**:Berkeley DB通常关注内存和磁盘空间的使用效率,4.8版本可能进一步降低了存储开销,从而在资源有限的环境中更高效。 4. **错误处理和恢复**:为了提高系统的健壮性,4.8版本可能增强了错误检测和...
Berkeley DB -- 入门知识和一个小例子_iyangjian2005997_新浪博客.mht
《BerkeleyDB Manual C/C++》是一份详尽的官方文档,主要针对使用C和C++语言进行数据库操作的开发者。BerkeleyDB是一款轻量级、高性能的关系型数据库管理系统,常用于嵌入式系统和分布式应用程序。这篇手册将深入...
db-6.1.26.tar.gz berkeley db
Berkeley DB Java Edition (JE) 官方7.5.11下载版本。 相关介绍 https://blog.csdn.net/hadues/article/details/80854288
2. **Java API**:一组接口和类,如`Database`、`DatabaseEntry`和`Transaction`,使得开发者可以使用Java代码与BerkeleyDB进行交互。 3. **示例和文档**:可能包含演示如何使用BerkeleyDB Java API的示例代码,以及...
标题“Berkeley DB C++编程入门教程”意味着文档旨在引导读者通过C++语言了解和使用Berkeley DB。这种数据库提供了一个简洁的API,使得开发者可以快速地存储和检索数据,无需复杂的数据库配置或管理。 在描述中提到...
3. **使用BerkeleyDB**:Scrapy-Deltafetch会利用BerkeleyDB的API,将抓取到的URL和数据存储为键值对,便于后续判断新旧和更新内容。 通过以上内容,我们了解了BerkeleyDB的核心特性和安装过程,以及它在Scrapy-...