Symbian数据库
上一篇 / 下一篇 2010-04-14 11:03:05 / 个人分类:手机软件开发
Symbian数据库
6V*^;HV4k*S9a)E051Testing软件测试网'q(|"Q#K8BC5c l{ba+rSymbian数据库的示例,可以在诺基亚的论坛下载到,这里我简单介绍一下Symbian数据库的使用。
9O.XX[t%F0首先介绍数据库所使用到资源:
!K`R:@`-^*_sWe v0(1)RDbStoreDatabase:通过文件存储打开的数据库,提供了进行数据库操作的API,独占使用数据库,不可共享使用。51Testing软件测试网
KP+D9[\hz
(2)RDbNamedDatabase:通过文件名打开的数据库,同样提供API。使用C/S模式,可以共享使用。51Testing软件测试网{"W$mw{Be2^4i$|
(3)CDbColSet:数据库字段的集合,可用于在数据库中创建表格。
E(Nn$S _"kN([#|0(4)使用到的库和头文件:ws32.lib
K"E%Tf9Bq4Wz)N0
4m9~O3vW&mTB0数据库API的使用:51Testing软件测试网y+EE"I1[v%QifL)T&y
$m H'u9_O@
Y(^3s%Z0(1)数据库类的声明:
jon-m7~PQ0class CMiapSampleDatabase : public CBase51Testing软件测试网^a:C3L0Jz-q-B!?dy'[
{51Testing软件测试网Z&O
u0z!uniE0zw
public:
)WAQ |$on0//Some Functions51Testing软件测试网7r-N0uo2V%I
| g?&D)b
njj9]V3A0private:51Testing软件测试网X*j0^T%_!py2F6Vc+l
RFs iFsSession;51Testing软件测试网y(V~5_ p"q6z!a[
RDbStoreDatabase iDb;
D%N&m
~oO]0};
0TY1d Q.t$@a0将RFs和RDbStoreDatabase声明为数据成员。51Testing软件测试网ZR7rGAfW
51Testing软件测试网)mCW7Ll:C
(2)创建数据库:
/`H&h"yiCK"^S$Y:D8M0_LIT( KFileName, "C:\\DataBase.db" );
'E'WB9S)z0k-nd0CFileStore* FileStore = CPermanentFileStore::ReplaceL(iFsSession, KFileName, EFileRead|EFileWrite);51Testing软件测试网,S,ij.A4VMI$Du+N$q5p~
CleanupStack::PushL(FileStore);
wXHChC%g0FileStore->SetTypeL(FileStore->Layout());51Testing软件测试网 lv8|dEpbr#cj
TStreamId id = iDb.CreateL(FileStore);
h1D7HQ;@"|V0FileStore->SetRootL(id);51Testing软件测试网/F1Q }]idgOh
FileStore->CommitL();51Testing软件测试网3Z'\~&NI3uX i-G
CleanupStack::PopAndDestroy( FileStore );
4]6] G3}/R*?0iOpen = ETrue;
4[
R
SFK
z6Q0iDb.Close();
}Vo jG0r4Gu:ox}0首先打开一个文件流存储(FileStore),通过调用RDbStoreDatabase::CreateL(CStreamStore* aStore)来创建数据库。最后将文件流提交。
)]+{3Jw
kn&ry051Testing软件测试网1RV)T c$S
(3)创建表格:
&aSSq7v!zpG
xT P0通过文件流存储打开数据库:51Testing软件测试网S;N#LR F(z
_LIT( KFileName, "C:\\DataBase.db" );51Testing软件测试网&g'c5R!Pd0@
CFileStore* FileStore = CPermanentFileStore::OpenLC( iFsSession, KFileName, EFileRead|EFileWrite);51Testing软件测试网0}tCP8qr.B
FileStore->SetTypeL(FileStore->Layout());51Testing软件测试网 y m1U1_#yvC$TT
iDb.OpenL( FileStore, FileStore->Root() );51Testing软件测试网*X0Cd8y:s_&m9N p
51Testing软件测试网H L"q.{P
添加字段:51Testing软件测试网5B8y HUL$i
_LIT(KId, "Id");51Testing软件测试网6O2sT3R
x"o,|mU*m+w/?d(J
y
_LIT(KText, "Text");
vk @
j8R R&J0_LIT(KTableName, "Table");51Testing软件测试网!\cphu} q-lD
TDbCol IdCol( KId, EDbColText );51Testing软件测试网W[!D!Zw3aPC$hfn
TDbCol TextCol( KText, EDbColText );51Testing软件测试网[kU&o1q
CDbColSet* ColSet = CDbColSet::NewLC();51Testing软件测试网V)h
_ y2pP!f
ColSet->AddL(IdCol);51Testing软件测试网^
iPScm8gb.A
ColSet->AddL(TextCol);
"iu2HH1n{`3ID.c0
&dh b [.@ffx5~E0创建表格:51Testing软件测试网/E7P$L+i;@O$F
User::LeaveIfError( iDb.CreateTable( KTableName, *ColSet ) );51Testing软件测试网k{#Z&|!z]i%j5B
P8\+S%CK0释放不使用的内存:51Testing软件测试网#p`{
x5]e7n5W
CleanupStack::PopAndDestroy(ColSet);51Testing软件测试网G$c g,g,l
CleanupStack::PopAndDestroy( FileStore );51Testing软件测试网
Jg&Fo1nnC:q
51Testing软件测试网)i$d;I _Ex]
Mpe$j
(4)创建索引:
eft\A0TDbKeyCol IdKey( KId );51Testing软件测试网T|M
H!i_A8YD
CDbKey* key=CDbKey::NewLC();51Testing软件测试网@e!mV
d:GS'_]
key->AddL( IdKey );51Testing软件测试网l]V:VR4L0d$G
User::LeaveIfError( iDb.CreateIndex( KTableName, KTableName, *key));51Testing软件测试网~ O[ Y3R;~Q&tf8@
CleanupStack::PopAndDestroy(key);51Testing软件测试网,PMU3?`5]/_)w;\YT
首先创建一个索引对象,将其添加到索引集合中,通过调用RDbStoreDatabase::CreateIndex(const TDesC& aName,const TDesC& aTable,const CDbKey& aKey)创建表格,最后清除不使用的内存。
#W9dr Jc
V0
9C0u.d0n tB0(5)插入记录:
oJw,j H](I0_LIT(KIdText, "100001"); 首先打开数据库。
"T:Q9^R_7|0打开表:51Testing软件测试网0yu(jx6c
RDbTable table;
2V(Dt5D}7o0CleanupClosePushL(table);
R]-S.w f AU5F0User::LeaveIfError( table.Open(iDb, aTableName, table.EUpdatable ) );
je
RZCBny^H0获取字段集合:51Testing软件测试网
jp]dMD V|"G
CDbColSet* ColSet = table.ColSetL();
(e"Pq'pp6}%Xeq0CleanupStack::PushL(ColSet);51Testing软件测试网;u;R8?9z[k@
添加记录:51Testing软件测试网JqAl;V Ku]
table.Reset();
(b:HNZ@L4a
y0table.InsertL();