S60平臺:使用DBMS APIs —使用行集和游標(1)
3、使用行集和游標
在Symbian系統的DBMS中,使用行集可以對數據庫中的數據進(jìn)行查找,恢復與修改操作。
關(guān)于行集有一點(diǎn)需要牢記,即列集所包括的并不是數據本身,其容納的非永存性元素只是對數據庫中真實(shí)數據行的索引進(jìn)行解析。
3.1 行集定義
列集的API包含三個(gè)主要概念:
·行集基類(lèi)(RDbRowSet)——一個(gè)抽象類(lèi)可以提供導航,行恢復以及數據的更新。數據源由兩個(gè)具體的操作定義。
·表行集(RDbTable)——提供表的完全視圖。
·SQL 視圖(RDbView)——提供表的一個(gè)視圖。該視圖依賴(lài)于建立視圖的SQL查詢(xún)。其可能包含數據的一部分和表的一部份列。
3.1.1 行集基類(lèi)
下列功能由Symbian 系統下,DBMS的行集操作提供:
·行尋找與匹配
·從數據庫中回復數據
·更新或插入行
·使用游標對行集進(jìn)行導航
·使用行集獲得行記錄的架構
·在行中解析與設定列
通過(guò)使用RDbRowSet,一個(gè)基類(lèi)可以對所有的行集類(lèi)型進(jìn)行定義。行集的具體類(lèi)型要從類(lèi)中獲取。
為了獲取數據,數據庫應用程序使用一個(gè)行集于當前行記錄在的集合中維持一個(gè)游標。行集提供一個(gè)抽象借口和兩個(gè)具體類(lèi)型:表行集與SQL視圖。
3.1.2 表行集
表行集將表的所有行和所有列視作一個(gè)行集。在行集中可以使用索引,從而從表中迅速獲得主鍵基準的列。若沒(méi)有使用索引,檢索出的行將是無(wú)序的。表行集被封裝在RDBTab類(lèi)中
。
當必須查看全表結構或需要以某種順序查看表中數據時(shí),表行集時(shí)非常有用的。如果想查找一個(gè)獨立且唯一的行,表行集優(yōu)于SQL的視圖。(參見(jiàn)3.3節,“使用索引獲取數據”,
可以了解到使用索引如何達到以上所說(shuō)的效果)然而,在達到多數情況,SQL更優(yōu)。
3.1.3 SQL視圖
使用RDbView類(lèi)可以對行集進(jìn)行SQL查詢(xún)。任何SQL查詢(xún)都封裝在TdbQuery中。一個(gè)SQL視圖是一個(gè)行集,其由數據庫上的SQL查詢(xún)語(yǔ)句實(shí)現且由一個(gè)單獨的表對其約束。RDbView類(lèi)的
Prepare方法可解析SQL并且可確定如何獲取數據的值。在缺省狀態(tài)下,必須通過(guò)評估視圖的值實(shí)現游標導航。
由于評價(jià)過(guò)程是很耗費時(shí)間的,一個(gè)預估值窗TDbWindow可能在預備階段使用,其能令行集進(jìn)行依次評估并進(jìn)行快速導航。完全的評估可能需要很長(cháng)時(shí)間,最好是對數據庫進(jìn)行分步
評估。
對于巨型行集,TDbWindow可以在平衡內存耗費(若視圖存儲完全的行集耗費將是巨大的)與速度(若行集被每個(gè)游標導航,速度將最慢)。行集可通過(guò)定義一個(gè)有限(或部分)的
,大小適中的預評估窗來(lái)獲取這種平衡。一個(gè)部分估值窗同樣可用于獲得本地導航SQL 結果集的部分視圖。
下列代碼組織了一個(gè)使用SQL查找語(yǔ)句的視圖:
...
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(); // 獲取當前行的副本
... // 對行進(jìn)行操作
}
CleanupStack::PopAndDestroy(); // 這樣同樣可關(guān)閉視圖
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。