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();
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()