Управление локальными базами данных ориентиров
Метаданные
Статья
Все ориентиры, а также категории ориентиров, хранятся в специальных базах данных которые могут быть локальными или удаленными. В качестве идентификатора базы данных выступает URI, который содержит спецификатор протокола доступа и расположение базы данных: protocol://location.
Для локальных баз данных используется:
- протокол "file".
- расположение содержит имя диска и имя файла ( с расширением *.ldb)
Пример URI локальной базы данных: "file://C:my_data.ldb"
Для управления локальными базами данных предназначены классы, входящие в Landmarks Database Management API. Основным классом является CPosLmDatabaseManager. (заголовочный файл: epos_cposlmdatabasemanager.h, библиотека: eposlmdbmanlib.lib)
Несколько простых примеров использования:
Следующий фрагмент кода демонстрирует как переименовать базу данных по умолчанию:
_LIT( KNewName, "New Database Name" );
const TInt KMaxDbNameLen = 64;
TBuf<KMaxDbNameLen> newName( KNewName );
// DB Manager;
CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager :: NewL();
CleanupStack :: PushL( dbManager );
// Получение URI базы данных по умолчанию:
HBufC* defaultUri = dbManager->DefaultDatabaseUriLC();
if( defaultUri )
{
// Получение информации по полученному URI
HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo :: NewLC( *defaultUri );
dbManager->GetDatabaseInfoL( *dbInfo );
// Чтение настроек
TPosLmDatabaseSettings& settings = dbInfo->Settings();
// Установка нового имени и сохранение настроек
settings.SetDatabaseName( newName );
dbManager->ModifyDatabaseSettingsL( *defaultUri, settings );
CleanupStack :: PopAndDestroy( 2 ); // dbInfo defaultUri
}
CleanupStack :: PopAndDestroy( 1 ); // dbManager
Следующий фрагмент кода показывает, как скопировать все имеющиеся базы данных с одного диска на другой:
// db manager;
CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager :: NewL();
CleanupStack :: PushL( dbManager );
// протокол для локальных баз
_LIT( KFileProto, "file" );
// массив для хранения URI локальных баз
CDesCArray* dbUriList = dbManager->ListDatabasesLC( KFileProto );
const TInt KMaxUriLen = 128;
TBuf<KMaxUriLen> uri, newUri;
TChar driveFrom = 'C',
driveTo = 'E';
TBuf<1> newDrive;
newDrive.Append( driveTo );
for(TInt i = 0; i < dbUriList->Count(); i++ )
{
uri = (*dbUriList)[i];
if( uri[7] == driveFrom )
{
// формирование нового URI: file://C... -> file://E...
newUri = uri;
newUri.Replace( 7, 1, newDrive );
// если такая база уже существует
if( dbManager->DatabaseExistsL( newUri ) )
{
// удалить существующую базу
dbManager->DeleteDatabaseL( newUri );
}
// копирование
dbManager->CopyDatabaseL( uri, newUri );
}
}
CleanupStack :: PopAndDestroy( 2 ); // iDbList dbManager


(no comments yet)