Symbian数据库的示例,可以在诺基亚的论坛下载到,这里我简单介绍一下Symbian数据库的使用。 首先介绍数据库所使用到资源: (1)RDbStoreDatabase:通过文件存储打开的数据库,提供了进行数据库操作的API,独占使用数据库,不可共享使用。 (2)RDbNamedDatabase:通过文件名打开的数据库,同样提供API。使用C/S模式,可以共享使用。 (3)CDbColSet:数据库字段的集合,可用于在数据库中创建表格。 (4)使用到的库和头文件:ws32.lib edbms.lib d32dbms.h f32file.h s32file.h
数据库API的使用:
(1)数据库类的声明: class CMiapSampleDatabase : public CBase { public: //Some Functions
private: RFs iFsSession; RDbStoreDatabase iDb; }; 将RFs和RDbStoreDatabase声明为数据成员。
(2)创建数据库: _LIT( KFileName, "C:\\DataBase.db" ); CFileStore* FileStore = CPermanentFileStore::ReplaceL(iFsSession, KFileName, EFileRead|EFileWrite); CleanupStack::PushL(FileStore); FileStore->SetTypeL(FileStore->Layout()); TStreamId id = iDb.CreateL(FileStore); FileStore->SetRootL(id); FileStore->CommitL(); CleanupStack::PopAndDestroy( FileStore ); iOpen = ETrue; iDb.Close(); 首先打开一个文件流存储(FileStore),通过调用RDbStoreDatabase::CreateL(CStreamStore* aStore)来创建数据库。最后将文件流提交。
(3)创建表格: 通过文件流存储打开数据库: _LIT( KFileName, "C:\\DataBase.db" ); CFileStore* FileStore = CPermanentFileStore::OpenLC( iFsSession, KFileName, EFileRead|EFileWrite); FileStore->SetTypeL(FileStore->Layout()); iDb.OpenL( FileStore, FileStore->Root() );
添加字段: _LIT(KId, "Id"); _LIT(KText, "Text"); _LIT(KTableName, "Table"); TDbCol IdCol( KId, EDbColText ); TDbCol TextCol( KText, EDbColText ); CDbColSet* ColSet = CDbColSet::NewLC(); ColSet->AddL(IdCol); ColSet->AddL(TextCol);
创建表格: User::LeaveIfError( iDb.CreateTable( KTableName, *ColSet ) );
释放不使用的内存: CleanupStack::PopAndDestroy(ColSet); CleanupStack::PopAndDestroy( FileStore );
(4)创建索引: TDbKeyCol IdKey( KId ); CDbKey* key=CDbKey::NewLC(); key->AddL( IdKey ); User::LeaveIfError( iDb.CreateIndex( KTableName, KTableName, *key)); CleanupStack::PopAndDestroy(key); 首先创建一个索引对象,将其添加到索引集合中,通过调用RDbStoreDatabase::CreateIndex(const TDesC& aName,const TDesC& aTable,const CDbKey& aKey)创建表格,最后清除不使用的内存。
(5)插入记录: _LIT(KIdText, "100001"); 首先打开数据库。 打开表: RDbTable table; CleanupClosePushL(table); User::LeaveIfError( table.Open(iDb, aTableName, table.EUpdatable ) ); 获取字段集合: CDbColSet* ColSet = table.ColSetL(); CleanupStack::PushL(ColSet); 添加记录: table.Reset(); table.InsertL(); table.SetColL( ColSet->ColNo(KId), KIdText ); table.PutL(); 清除内存: CleanupStack::PopAndDestroy(2); 注意:每插入一条记录,就必须调用table.InsertL(),设置完值后,必须调用table.PutL()提交。
(6)查询记录: 首先打开数据库和表。 TPtrC ptrc; for( table.FirstL(); table.AtRow(); table.NextL()) { table.GetL(); ptrc.Set( table.ColDes( colSet->ColNo( KId ) ) ); } table.FirstL()将焦点设置为第一条记录,table.AtRow()验证下一条记录是否存在,table.NextL()将焦点移动到下一条记录。 每查询一条记录,必须调用table.GetL(); 使用TPtrC::Set()将查询结果写进描述符。
(7)执行SQL语句: 首先打开数据库。 TBuf<256> SQL; SQL.Append( _L("//Some SQL") ); 执行: RDbUpdate DbUpdate; TInt incStat = DbUpdate.Execute(iDb, SQL, EDbCompareNormal); incStat = DbUpdate.Next(); while( incStat == 1 ) { incStat = DbUpdate.Next(); } DbUpdate.Close();
|