×
Namespaces

Variants
Actions

DBMS (СУБД) API

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Статья
Перевод:
Оригинал: DBMS
truf
Последнее редактирование: hamishwillee (09 Dec 2011)


Contents

Введение

DBMS (Database Menagement System) API - Система Управления Базами Данных (СУБД). DBMS предоставляет функции для создания и управления базами данных (БД), а также обеспечивает надежный и защищенный доступ к этим данным как с помощью C++ функций и так и с помощью SQL запросов. Запросы в DBMS поддерживают механизм транзакций. Благодаря механизму транзакций вы можете быть уверены, что все вносимые вами изменения будут исполнены, или ни одно из них не вступит в силу.

DBMS в Symbian OS является мощной, но не ресурсоемкой системой. Она поддерживает как язык запросов SQL, так и язык определения данных DDL. Встроенные C++ функции предоставляют функциональность для добавления, поиска, извлечения, изменения и удаления записей.

Создание базы данных

Создание Базы данных с помощью RDbStoreDatabase Следующий пример кода демонстрирует создание базы данных с помощью RDbStoreDatabase. В нем создается объект File Store (файловое хранилище данных) и БД в нем.

class CBookstoreDb : public CBase
{
...
private: // Члены класса
RFs iFsSession;
RDbStoreDatabase iBookstoreDb;
CFileStore* iFileStore;
...
};
TInt CBookstoreDb::CreateDbL(const TFileName& aNewBookstoreFile)
{
User::LeaveIfError(iFsSession.Connect());
// Создаем новый или заменяем существующий файл
iFileStore = CPermanentFileStore::ReplaceL(iFsSession,
aNewBookstoreFile, EFileRead|EFileWrite);
iFileStore->SetTypeL(iFileStore->Layout());
TStreamId id = iBookstoreDb.CreateL(iFileStore);
iFileStore->SetRootL(id); //Поместим id базы данных в корень хранилища
iFileStore->CommitL(); //Подтверждаем изменения в хранилище
... // Теперь БД открыта и готова к операциям с ней.

Примечание: Функция CreateDbL создает новый файл базы данных. Она принимает аргумент типа TFileName, содержащий абсолютное (включая путь) имя файла. В примере, любой существовавший файл с таким именем будет перезаписан функцией ReplaceL(). В конце примера создается root stream (корневой поток) объект и изменения структуры базы данных подтверждаются.


Создание базы данных с помощью RDbNamedDatabase Следующий пример кода демонстрирует создание базы данных с помощью RDbNamedDatabase. Этот пример более простой, поскольку отсутствует необходимость работы с потоками:

...
RFs iFsSession;
RDbNamedDatabase iBookstoreDb;
...
TInt CBookstoreDb::CreateDbL(const TFileName& aNewBookstoreFile)
{
User::LeaveIfError(iFsSession.Connect());
// Create new or replace existing database
User::LeaveIfError(iBookstoreDb.Replace(fsSession,
aNewBookstoreFile));
... // База данных открыта. Создаем таблицы и т.д.

Примечание: Метод Replace создаст новый файл базы данных или заменит существующий. В файле создается пустая база данных. После этого база данных открывается и готова к созданию таблиц, индексов и пр. При создании базы данных, клиент получает исключающие права доступа к ней (доступ др. клиентов блокируется). Функция Replace принимает аргумент типа TFileName, содержащие полное имя файла (вместе с путем).

В Symbian OS DBMS, длина имя базы данных DBMS ограничена 64 символами. Имя базы данных соответствует имени файла, в котором она создана. Использование расширения в имени файла не обязательно. К примеру, следующие имена правильны:

_LIT(KDbName,"C:\\system\\apps\\bookstoredb\\bookstore.dat");
_LIT(KDbName,"C:\\system\\apps\\bookstoredb\\bookstore");

Создание таблиц в базе данных

Для создания таблицы, разработчик должен быть знаком с тремя ключевыми понятиями: атрибут (столбец таблицы), множество атрибутов и индексный ключ. Индексный ключ инкапсулирован в CDbKey. Ключевой атрибут таблицы инкапсулирован в TDbKeyCol. Определение атрибута в TDbCol.


Схема базы данных

DBMS предоставляет функции для доступа к структуре базы данных (индексам, таблицам и пр.). Базовый класс базы данных RdbDatabase содержит следующие функции:

• TableNamesL(): Список имен всех таблиц, инкапсулированных в CDbTableNames.

• IndexNamesL(): Список имен всех индексов, инкапсулированных в CDbIndexNames. В качестве аргумента требует имя таблицы.

• ColSetL(): Определение столбцов таблицы, инкапсулированных в CDbColSet. В качестве аргумента требует имя таблицы.

• KeyL(): Определение индексного ключа для индекса таблицы. Метод принимает в качестве аргументов имена таблицы и индекса. Определения столбцов CDbColSet таблицы также могут быть получены из таблицы или ее отображения с помощью метода их базового класса RdbRowSet::ColSetL(). Переход от записи к записи в CdbColSet осуществляется с помощью методов этого же класса, либо с помощью класса TdbColSetIter.



Открытие и закрытие базы данных

База данных может быть открыта с исключающими (exclusive) правами (режим одного клиента) или с разделенными (shared) правами (клиент-серверный режим). RDbNamedDatabase поддерживает оба режима, а RDbStoreDatabase позволяет открыть базу только в режиме одного клиента.

Рекомендуется использовать RDbNamedDatabase API. Доступ в режиме одного клиента немного быстрее, но в этом случае база окажется недоступной для других программ, т.к. файл базы данных будет заблокирован. Для большинства случаев рекомендуется использовать доступ в клиент-серверном режиме.


Создание данных

Создание новой записи в таблице базы данных включает в себя следующие шаги: добавление пустой записи, изменение данных в ней и подтверждение внесенных изменений. table.InsertL() добавляет новую запись, а table.SetCol(...) позволяет изменить в ней данные. Если типом столбца является EDbColLongText8, EDbColLongText16 или EDbColLongBinary - то для изменения данных в нем следует использовать RDbColWriteStream.


Ссылки

This page was last modified on 9 December 2011, at 05:07.
114 page views in the last 30 days.