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

本文介绍了Symbian系统中S60平台的DBMS API使用方法,重点讲解了行集和游标的定义及使用场景。包括行集基类RDbRowSet的概念、表行集RDbTable的特性及其在查看全表结构时的应用,以及SQL视图RDbView的创建和使用。

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

<!--StartFragment-->

 

S60平台:使用DBMS APIs —使用行集和游标(1) 

3、使用行集和游标
在Symbian系统的DBMS中,使用行集可以对数据库中的数据进行查找,恢复与修改操作。
关于行集有一点需要牢记,即列集所包括的并不是数据本身,其容纳的非永存性元素只是对数据库中真实数据行的索引进行解析。

3.1 行集定义
列集的API包含三个主要概念:
 ·行集基类(RDbRowSet)——一个抽象类可以提供导航,行恢复以及数据的更新。数据源由两个具体的操作定义。
 ·表行集(RDbTable)——提供表的完全视图。
 ·SQL 视图(RDbView)——提供表的一个视图。该视图依赖于建立视图的SQL查询。其可能包含数据的一部分和表的一部份列。

3.1.1  行集基类
下列功能由Symbian 系统下,DBMS的行集操作提供:
 ·行寻找与匹配
 ·从数据库中回复数据
 ·更新或插入行
 ·使用游标对行集进行导航
 ·使用行集获得行记录的架构
 ·在行中解析与设定列
通过使用RDbRowSet,一个基类可以对所有的行集类型进行定义。行集的具体类型要从类中获取。
为了获取数据,数据库应用程序使用一个行集于当前行记录在的集合中维持一个游标。行集提供一个抽象借口和两个具体类型:表行集与SQL视图。

3.1.2  表行集
表行集将表的所有行和所有列视作一个行集。在行集中可以使用索引,从而从表中迅速获得主键基准的列。若没有使用索引,检索出的行将是无序的。表行集被封装在RDBTab类中

当必须查看全表结构或需要以某种顺序查看表中数据时,表行集时非常有用的。如果想查找一个独立且唯一的行,表行集优于SQL的视图。(参见3.3节,“使用索引获取数据”,
可以了解到使用索引如何达到以上所说的效果)然而,在达到多数情况,SQL更优。

3.1.3  SQL视图
使用RDbView类可以对行集进行SQL查询。任何SQL查询都封装在TdbQuery中。一个SQL视图是一个行集,其由数据库上的SQL查询语句实现且由一个单独的表对其约束。RDbView类的
Prepare方法可解析SQL并且可确定如何获取数据的值。在缺省状态下,必须通过评估视图的值实现游标导航。
由于评价过程是很耗费时间的,一个预估值窗TDbWindow可能在预备阶段使用,其能令行集进行依次评估并进行快速导航。完全的评估可能需要很长时间,最好是对数据库进行分步
评估。
对于巨型行集,TDbWindow可以在平衡内存耗费(若视图存储完全的行集耗费将是巨大的)与速度(若行集被每个游标导航,速度将最慢)。行集可通过定义一个有限(或部分)的
,大小适中的预评估窗来获取这种平衡。一个部分估值窗同样可用于获得本地导航SQL 结果集的部分视图。
下列代码组织了一个使用SQL查找语句的视图:
...
private: // 数据成员
RDbStoreDatabase iBookDb;
...
_LIT(KViewSql,"SELECT Author, Title FROM Books" );
RDbView view;
User::LeaveIfError(view.Prepare(iBookDb, TDbQuery(KViewSql), view.EReadOnly));
CleanupClosePushL(view);
User::LeaveIfError(view.EvaluateAll());
for (view.FirstL(); view.AtRow(); view.NextL())
{
 view.GetL(); // 获取当前行的副本
 ... // 对行进行操作
}
CleanupStack::PopAndDestroy(); // 这样同样可关闭视图

<!--EndFragment-->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值