Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование БД.docx
Скачиваний:
74
Добавлен:
08.03.2016
Размер:
712.24 Кб
Скачать
        1. Программный уровень

Классы программного уровня обеспечивают доступ к базам данных на уровне клиентского кода. Основные классы данного уровня:

QSqlDatabase– используется для подключения к БД;

QSqlQuery– обеспечивает взаимодействие с БД.

Дополнительные классы: QSqlError,QSqlField,QSqlIndexиQSqlRecord.

        1. Уровень пользовательского интерфейса

Классы уровня пользовательского интерфейса обеспечивают связь данных из БД с виджетами, предназначенными для представления информации. Он включает классы: QSqlQueryModel,QSqlTableModelиQSqlRelationalTableModel, созданные для работы с подсистемойQt, называемой «Модель-представление» (англ.Model/view Framework, также наз. «Интервью»), архитектура которой представлена нарисунок 0.

Рисунок 0 – Архитектура подсистемы «Модель-представление»

Модель(Model) взаимодействует систочником данных(Data), предоставляя интерфейс для других компонентов в архитектуре. Характер связи зависит от типаисточника данных, и путиреализации модели.

Представление(View) извлекает элементы данных изисточника данныхчерезмодельи отображает их в определенном виде.

Делегат(Delegate) отображает отдельные элементы данных и определяет способ их редактирования.

«Модель-представление» позволяет отделить способ хранения данных от их представления пользователю. 

      1. Операции с бд

        1. Соединение с бд

Класс QSqlDatabaseобеспечивает интерфейс для получения доступа к БД через подключение. ЭкземплярклассаQSQlDatabaseпредставляет в программе подключение к БД.

  1. QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

  2. db.setDatabaseName("borey");

  3. db.setUserName("user");

  4. db.setPassword("password");

  5. bool ok = db.open();

Для создания подключения вызывается статическая функцияaddDatabase(). Ей передается драйвер или тип драйвера.

Как только объект QSqlDatabase создан, установить параметры подключения можно с помощью функций:setDatabaseName(),setUserName(),setPassword(),setHostName(),setPort()иsetConnectOptions(). Далее необходимо вызвать функциюopen() для открытия подключения.

        1. Выполнение запросов выборки и возврат результатов

Для выполнения запросов выборки можно просто создать объекттипаQSqlQueryи вызвать функциюQSqlQuery::exec(), например:

  1. QSqlQuery query;

  2. query.exec("SELECT name, salary FROM employee "

  3. "WHERE salary > 50000");

  4. while (query.next())

  5. {

  6. QString name = query.value(0).toString();

  7. int salary = query.value(1).toInt();

  8. qDebug() << name << salary;

  9. }

В конструкторклассаQSqlQueryдополнительно можно передать объектQSqlDatabase, для указания, какое конкретно подключение использовать при выполнении запроса. В примере выше мы не указывали подключение, используя таким образом подключение по умолчанию.

QSqlQueryобеспечивает доступ к результирующему множеству записей. После вызоваexec(), внутренний указательQSqlQueryрасполагается на позиции перед первой записью. Необходимо вызвать QSqlQuery::next() для продвидения к первой записи, затем опятьnext() несколько раз для получения доступа к записям, пока функцияnext() не вернетfalse.

Функция QSqlQuery::value() возвращает значение поля текущей записи. Поля пронумерованы, начиная с нуля. QSqlQuery::value() возвращает тип QVariant, тип, который может хранить разные типы данныхC++ иQt, например:QStringилиQByteArray. Если БД поддерживает такую возможность, мы можем вызвать QSqlQuery::size() для определения количества результирующих записей запроса.