现在的位置: 首页 > 综合 > 正文

Symbian数据库

2013年08月03日 ⁄ 综合 ⁄ 共 2966字 ⁄ 字号 评论关闭

原文出处:http://blog.csdn.net/zhaotaobenny/archive/2007/09/05/1773020.aspx

 

Series 60 Developer Platform 1.0: DBMS Example v1.0

DBMS database example application demonstrates how to use simple database APIs in the Series 60 Developer Platform 1.0.

 

Series 60 Developer Platform 2.0: DBMS Example v1.0

This example application demonstrates how to make use of the database APIs to create and maintain a database.

 

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();

【上篇】
【下篇】

抱歉!评论已关闭.