本篇开始介绍游标(Cursors)的应用,主要介绍打开关闭游标以及使用游标来定位记录。
在JE中你可以使用游标来遍历记录,还可以使用游标来增删改记录。同时游标还是唯一一种可以用于访问重复记录集中记录的机制。
一.打开和关闭游标
你可以使用Database.openCursor()方法来打开一个游标,使用Cursor.close()方法来关闭它。需要注意的是关闭游标的顺序,你必须先关闭游标,再关闭Database,最后关闭Environment。
Environment myDbEnvironment = null;
Database myDatabase = null;
Cursor myCursor = null;
try {
...
myCursor = myDatabase.openCursor(null, null);
} catch (DatabaseException dbe) {
} finally {
try {
if (myCursor != null) {
myCursor.close();
}
if (myDatabase != null) {
myDatabase.close();
}
if (myDbEnvironment != null) {
myDbEnvironment.close();
}
} catch(DatabaseException dbe) {
System.err.println("Error in close: " + dbe.toString());
}
}
二.获取记录
游标提供了很多API用于检索记录:
- Cursor.getNext()
移动游标到下一个记录所在的位置。
- Cursor.getPrev()
移动游标到前一个记录所在的位置。
以上两个API非常简单。
- Cursor.getSearchKey()
这个方法允许你传入一个key值,游标会移动到该传入key值对应的记录所在的位置。
- Cursor.getSearchKeyRange()
这个方法允许你传入一个key值,游标会移动到大于等于该传入key值对应的记录所在的位置。
- Cursor.getSearchBoth()
这个方法允许你传入key值和value值(即一个记录),游标会移动到等于该传入记录的所在的位置。
- Cursor.getSearchBothRange()
这个方法允许你传入key值和value值(即一个记录),游标会移动到键相等并且值会大于等于该传入记录值的记录所在的位置。
这上面的4个API是用来查找记录的,下面用例子解释下,比如我们的数据库中有这样的记录:
Key | Value |
a | v |
b | v |
b | vv |
b | vvv |
d | v |
d | vvv |
Method | Key | Value | Found |
getSearchKey | a | | a/v |
getSearchKeyRange | b | | b/v |
getSearchKeyRange | c | | d/v |
getSearchBoth | b | vv | b/vv |
getSearchBothRange | d | vv | d/vvv |
- Cursor.getNextNoDup()
用于在重复记录集中,游标移动到下一个key值不同的记录
- Cursor.getPrevNoDup()
用于在重复记录集中,游标移动到上一个key值不同的记录
- Cursor.getNextDup()
用于在重复记录集中,游标移动到下一个key值相同的记录
- Cursor.getPrevDup()
用于在重复记录集中,游标移动到上一个key值相同的记录
- Cursor.count()
计算当前重复记录集中的记录个数。
最后这几个API是用于重复记录集的,我们继续用之前的那个数据来演示下,假设当前的游标位于b/vv
Method | Found |
getNextNoDup | d/v |
getPrevNoDup | a/v |
getNextDup | b/vvv |
getPrevDup | b/v |
getPrevDup | 3 |
下面演示下API的例子,先从最简单的getNext开始。
Cursor cursor = null;
try {
...
DatabaseEntry foundKey = new DatabaseEntry();
DatabaseEntry foundData = new DatabaseEntry();
cursor = myDatabase.openCursor(null, null);
while (cursor.getNext(foundKey, foundData, LockMode.DEFAULT) ==
OperationStatus.SUCCESS) {
String theKey = new String(foundKey.getData(), "UTF-8");
String theData = new String(foundData.getData(), "UTF-8");
System.out.println("Key | Data : " + theKey + " | " +
theData + "");
}
} catch (Exception e) {
} finally {
cursor.close();
}
getPrev是类似的,然后我们演示下查找的API
String searchKey = "Alaska";
String searchData = "Fa";
Cursor cursor = null;
try {
...
cursor = myDatabase.openCursor(null, null);
DatabaseEntry theKey =
new DatabaseEntry(searchKey.getBytes("UTF-8"));
DatabaseEntry theData =
new DatabaseEntry(searchData.getBytes("UTF-8"));
cursor = myDatabase.openCursor(null, null);
OperationStatus retVal = cursor.getSearchBothRange(theKey, theData,
LockMode.DEFAULT);
if (retVal == OperationStatus.NOTFOUND) {
System.out.println(searchKey + "/" + searchData +
" not matched in database " +
myDatabase.getDatabaseName());
} else {
String foundKey = new String(theKey.getData(), "UTF-8");
String foundData = new String(theData.getData(), "UTF-8");
System.out.println("Found record " + foundKey + "/" + foundData +
"for search key/data: " + searchKey + "/" + searchData);
}
} catch (Exception e) {
} finally {
cursor.close();
}
最后演示下游标操作重复记录集
Cursor cursor = null;
try {
...
DatabaseEntry theKey = new DatabaseEntry(searchKey.getBytes("UTF-8"));
DatabaseEntry theData = new DatabaseEntry();
cursor = myDatabase.openCursor(null, null);
OperationStatus retVal = cursor.getSearchKey(theKey, theData,
LockMode.DEFAULT);
if (cursor.count() > 1) {
while (retVal == OperationStatus.SUCCESS) {
String keyString = new String(theKey.getData(), "UTF-8");
String dataString = new String(theData.getData(), "UTF-8");
System.out.println("Key | Data : " + keyString + " | " +
dataString + "");
retVal = cursor.getNextDup(theKey, theData, LockMode.DEFAULT);
}
}
} catch (Exception e) {
} finally {
cursor.close();
}
分享到:
相关推荐
LCUS型 USB继电器模块 电脑串口控制开关 PC智能控制器在pc端使用Qt程序进行串口控制驱动程序
高效率16KW三相PFC程序方案: 98.916%效率、功率因数0.9995、电流谐波2.287%,在三相交流源输入380Vac,输出720Vdc、16KW时。 一、本方案是在huawei充电模块R75020G1机上进行重新软件编程设计,省去客户花大量时间、人力、资金去做样机。 二、客户要买如下物品: 1、华为R75020G1充电模块,约1000块。 2、DSP芯片:TMS320F28032PAG(TQFP-64),原机器的DSP被加密,需要更。 三、资料包括: 1、PFC板原理图(Altium Designer 10),保证99%的线路正确。 2、整个CCS工程文件,C语言程序。 3、半导体器件资料。 4、测试报告一份,附带部分波形图。 四、PFC主电路拓扑:T型三相维也纳,每相分两路交错并且采用变压器耦合均流,均流效果极佳。 现在华为的充电桩模块: 15KW(R75020G1 G2 G4)、20KW(R95021G1)、 20KW(R100020G1)、30KW(R100030G1), PFC主电路拓扑是完全一样的,所以本程序算法完全通用。 五、主控芯片:采用便宜的DSP芯片T
java精品项目-基于ssm项目源码嘟嘟健身房管理系统,含有完整的源码和报告文档
AbBillOpDao.class
随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,“漫画之家”系统就是信息时代变革中的产物之一。任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场进行调研,漫画需求进行分析,概要设计,系统详细设计,测试和编码等步骤,设计并实现了“漫画之家”系统 。系统选用B/S模式,应用java技术, MySQL为后台数据库。系统主要包括首页,个人中心,用户管理,漫画管理,同人插画管理,漫画活动管理,商品管理,论坛管理,我的收藏管理,留言板管理,系统管理,订单管理等功能模块。本文首先介绍了“漫画之家”系统的技术发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,根据需求分析制定模块并设计数据库结构,再根据系统总体功能模块的设计绘制系统的功能模块图,流程图以及E/R图。然后,设计框架并根据设计的框架编写代码以实现系统的各个功能模块。最后,对初步完成的系统进行测试,对功能、单元和性能进行测试。
西门子PLC模拟量滤波程序,西门子1200和1500通用,有电压或者电流或者热电偶选择,高低位和高高低低位报警,有滤波功能,非常实用的功能块,配有详细的注释,帮助快速理解。
一个简单的磁盘图标修改工具,用于对电脑磁盘和移动存储图标进行个性化 由于Windows系统限制,目前图标仅支持ICO格式,且必须重新链接驱动器或重启才能生效(本人已尝试过,重启资源管理器无效) 项目地址:https://gitee.com/msdsl/usb-icon-tool 我将继续优化本项目
基于小程序的物流管理系统答辩PPT.pptx
三菱、汇川plc用485通讯板和变频器通讯,实现正转、反转、运行过程改变频率实现调速。 D8120设为H0C8E, Rs D200 k12 D500 k13。 D207D206是正转、反转、停止命令控制。 D204D203若写入H44H45是允许频率写入,若写入H41H46是允许正、反、停运行控制。 程序有中文注释和注解,总结很祥细,并己上机试好,pLC加485通讯BD板控制变频器
锂电池 保护板方案 中颖SH367309方案 原理图 PCB 源代码 保护板方案 中颖SH367309方案 原理图 PCB 源代码 全套方案
matlab代码资源。基于高斯混合模型(GMM)的说话人识别MATLAB代码。基于高斯混合模型(Gaussian Mixture Model, GMM)的说话人识别技术是一种模式识别方法,它通过构建说话人的语音特征的统计模型来实现个体识别。GMM能够捕捉语音信号的多模态特性,通过混合多个高斯分布来近似复杂的概率密度函数。在说话人识别中,GMM用于建模说话人的独特语音特征,如梅尔频率系数。
昆仑通泰触摸屏与v20变频器uss通讯,控制变频器 1,通过触摸屏与变频器uss通讯 2,通过触摸屏读取变频器电压,电流,频率 3,通过触摸屏设定变频器正反转,设定频率,加速,减速时间等 4,控制变频器启停
ATAT最新版分享来源为官网
嵌入式实验程序 软件实验1-4、硬件实验5、6 及练习 (实验一 ARM 汇编实验 1—简单数据搬移实验 实验二 ARM 汇编指令实验 2—字符串拷贝实验 实验三 ARM实验 3--ARM 处理器工作 模式实验 实验四 混合编程实验—ARM 启动过程控制实验 实验五 ARM 硬件接口实验 1 —基本 IO 实验 实验六、外部中断实验)
中小学生交通安全班会讲座培训教案课件
JVET-Q2002-v3.zip 文件是关于VTM 8的算法描述。VTM 8是H.266/VVC视频编码标准的一种实现,它是一个用于测试和验证视频编码算法的工具。这个模型包含了多种编码技术,如帧内预测、帧间预测、变换编码、量化、熵编码等,以及一些高级特性,比如自适应环路滤波、多参考帧预测、子块划分等。
WordPress子比AI自动发文章插件,一款可以快速借助ChatGPT,快速生成大量原创有深度文章,快速丰富网站内容,新建文章标题跟分类后,点击生成即可自动生成文章,生成后可以点击查看文章直达文章界面,分类可以设置不存在的,程序发现不存在会自动新建。
尚硅谷大数据技术之高频面试题9.1.2.docx
简约考研分析培训
485转web api服务器框架源码。 集成iot,web api服务,这套带码是通过C#编写集成IOCP高性能高并发优势服务器服务源码。 带手机app测试demo源码 具体具备功能如下: 1、具备EF6+mssql数据库功能,可更改为MYSQL或SQLITe. 2、自带WEB API服务,抛弃IIS支持。 用户可以通过WEB前端直接读取远程设备数据以及下发控制指令。 WEB API功能有服务器日志查询、WEB API接口认证用户管理、远端设备注册管理、服务器轮询读取任务启停、服务器参数设置、查询历史数据记录、下发指令到终端设备。 3、系统目前支持modbus 、modbus rtu协议,可定制开发集成Modbus TCp、西门子PLC S7协议、OPC协议、三菱PLC协议以及集成MQTT服务(以上协议在框架中没有集成,可以定制集成)。 4、系统自带MVC服务,开发API像平常使用的一样方便。 另外它自带硬件协议驱动。 5、与传统协议方法不同,比如Modbus设备,需要PC端主动去连接设备,而这套框架只需要监听端口,服务器就能自动去轮询终端所有设备。 6、API接口具备动态增加轮询读