symbian DBMS数据库

来源:互联网 发布:淘宝ps教程自学视频 编辑:程序博客网 时间:2024/05/16 18:38

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

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhaotaobenny/archive/2007/09/05/1773020.aspx

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 逆水寒装备分解错了怎么办 轴与孔间隙过大怎么办 小孩眼睛被打了怎么办 玩王者荣耀手机屏幕竖着怎么办 棉被被老鼠尿湿怎么办 打完子弹能下来怎么办 怪物猎人 弩子弹打完了怎么办 烤瓷牙龈发黑了怎么办 做彩超前喝水了怎么办 胸贴过敏红痒怎么办 芡粉里面有虫了怎么办 勾芡淀粉放多了怎么办 剁排骨没有好刀怎么办 硬币掉进档位里怎么办 魅族mx5手机太卡怎么办 华为m9手机声音小怎么办 放卡的地方堵住怎么办 美图m8蓝屏了怎么办 美图m8手机蓝屏怎么办 美图m6s手机白屏怎么办 魅蓝2开不开机怎么办 魅族手机主键没反应怎么办 魅族手机主键失灵怎么办 手机4g网络不稳定怎么办 华为m9收不到手机信息怎么办 华为手机wifi信号弱怎么办 手机连接wifi信号差怎么办 华华为p10信号不好怎么办 烟没拆封受潮了怎么办 和亲儿子发生了性关系怎么办 无心磨磨出来圆度不好怎么办 中国人在越南办结婚证怎么办? 无线网被限速了怎么办 联通大王卡上传速度慢怎么办 小米手机下载视频速度慢怎么办 大疆御air脚架断了怎么办 大疆飞行器线断了怎么办 移动校园卡套餐到期后怎么办 流量年包到期了怎么办 家里无线网信号不好怎么办 无线网光信号红灯了怎么办