使用DBMS APIs —使用行集和游标(2)

本文深入探讨了S60平台下DBMSAPIs的应用,重点讲解了行集与游标的使用方法及状态管理。文章还介绍了如何通过索引获取数据,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

S60平台:使用DBMS APIs —使用行集和游标(2) 
 
3.2 游标
一个游标可以对行集中的所有有效行进行导航。有效行依赖于行集是如何生成的,特别是行集是否是使用评估窗的SQL视图

3.2.1 游标状态
在大多数普通情况下,游标保存来自行集的,从属于行的值。然而,游标还需要保存其他一些状态。
一个游标可以保存“起始”或“结束”状态。起初,游标进行重置,游标定位于开始端。其初始位置指向第一行的前一行,结束位置指向最后一行的下一行。对于一个空集来说,
其仍有指向数据集尾的游标,在这种情况下,从起始位置对第一行进行导航和对最后一行进行导航是等价的,游标在起始状态时定位。在对集合的最后一行进行导航时,执行过程
是相似的。
当对一行进行更新或插入操作时,游标有一个状态阻止导航,直到更新或插入操作完成。
删除当前行后,游标不发生变化并保存由于删除操作所而生成的无效值。当导航至下一行,前一行或特殊行时,游标将移动至指定行或者在还有行的情况下,指向起始或结束位置
,删除行集值时,行集中的值将被从行集中移除。

3.3 通过索引获得数据
可以通过使用SQL视图或RDbTable行集对象,生成一个索引来获取数据。
RdbTable类提供了一个简单的SeeKL方法来快速查找行。其使用TDbSeekKey来获取当前存在的第一行值。当使用已知唯一索引键快速获得一行值时,SeeKL方法非常有效。若需要更
多复杂的查找操作,SQL视图与RdbRowSet基类可以提供丰富的解决办法。
下列代码使用RDbTable和一个索引项来查找行的首次匹配。索引在2.3.3节定义,“索引键。”
...
_LIT(KBooksTable, "Books");
_LIT(KBooksIndexName,"BooksIndex");
...
private: // 数据成员
RDbStoreDatabase iBookDb;
...
void CBookDb::GetABookFastL(const TDesC& aTitle, TDes& aResult)
{
RDbTable rowset;
RDbTable table;
TDbSeekKey seekKey(aTitle); // 初始化单列查询值
// Open the 'Books’ table. Specify what index is used.
// 打开Books表,实例化使用的索引
User::LeaveIfError(
table.Open(iBookDb, KBooksTable, rowset.EReadOnly));
CleanupClosePushL(table); // 记得弹出与关闭表
User::LeaveIfError(table.SetIndex(KBooksIndexName));
if( rowset.SeekL(seekKey) ) // SeeKL需要的键是一个集合
{
// 游标被设定用于查找列,关于游标的相关操作。
rowset.GetL();
...
}
else
{
// 找不到值
}
...
// 将表从清洁栈中弹出,将清洁栈关闭
CleanupStack::PopAndDestroy();
索引数据类型必须匹配目标类型,即Tint匹配ColIntnn,等等。一个TdbSeekKey对象使用需求匹配值(aTitle)索引来创建。举个例子,有一个已知索引,但其在查询表时,必须以
下列格式使用才行:
CDbNames* idxs = iBookDb.IndexNamesL(KBooksTable);
在试图查找表前,为表设定索引是非常重要的。最终,SeekL()尝试去匹配值。如果键值被匹配,那么游标则被设定到指定位置。一个后续方法GetL()将获得数据以备进一步操作。
<!--EndFragment-->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值