Новость из категории: Информация

Нестандартные GUI-тулкиты: базы данных в Ultimate++

Содержание:
1. Сессии и объекты запросов (Вы читаете данный раздел);
2. SqlExp;
3. Схемы баз данных;
4. Виджеты для работы с базами данных.
Нестандартные GUI-тулкиты: базы данных в Ultimate++

Не секрет, что современное коммерческое программирование очень часто ориентировано на работу с базами данных. Удобство работы с базами данных и скорость написания пользовательских интерфейсов к ним часто являются решающим фактором при выборе тулкита и среды разработки. Создатели U++ хорошо понимают это, так что удобная работа с базами данных является одной из самых сильных сторон этого тулкита. Как и во всех других сферах, при работе с базами данных проявляется необычность U++, которая, тем не менее, оборачива-ется серьезной экономией времени при рутинной работе с запросами SQL.

В U++ имеются интерфейсы к СУБД SQLite3, MySQL, PostgreSQL и Oracle. В этой статье я буду использовать SQLite3, поскольку она непосредственно включена в состав U++ и не требует инсталляции или конфигурирования. Ее можно использовать сразу же, не отвлекаясь на особенности администрирования «больших» баз данных, не имеющие отношения к U++.

Ultimate++ позволяет создавать программные решения практически любой сложности на языке программирования C++. Так, поговаривают, что первые ревизии Яндекс.Браузер создавались именно при помощи данного инструментария. Ну а ознакомится с последней версией данного интернет-браузера Вы сможете на http://onebooks.ru (http://onebooks.ru/brauzery/22-yandeks.brauzer.html).

Сессии и объекты запросов

Доступ к базам данных в U++ реализован с помощью плагинов, что позволяет относительно легко добавлять интерфейсы к новым типам баз данных. Подключить плагин для SQLite3 можно так:
#include
#include

Работа с БД в U++ начинается с создания объекта сессии. Его название зависит от используемой базы данных и в случае SQLite3 выглядит так:
Sqlite3Session session;

Далее следует соединиться с существующей базой данных. Для SQLite3 используется метод Open, которому передается имя файла базы данных. Для других СУБД название метода и передаваемые параметры могут быть другими - в частности, для более «серьезных» баз нужно передавать имя пользователя и пароль.
if(!session.Open(ConfigFile("simple.db"))) {
Cout() << "Can't create or open database filen";
return;
}

Для отладки очень полезным бывает метод SetTrace(), который выводит в стандартный лог все выполняемые базой команды SQL:
#ifdef _DEBUG
session.SetTrace();
#endif

Нестандартные GUI-тулкиты: базы данных в Ultimate++

После создания сессии нужно создать объект для обработки SQL-запросов, который «привязан» к определенной сессии:
Sql sql(session);

Как правило, в программе используется только одна сессия и передача ее как параметра ко всем запросам становится избыточной. В этом случае можно использовать переменную так называемой «главной базы данных» (Main Database) с именем «SQL». Ей присваивается объект сессии и все создаваемые объекты запросов автоматически «привязываются» к этой сессии:
SQL = session; // Задать сессию глобально
Sql db; // Автоматически используется сессия, заданная
// для глобального объекта SQL

Методы объекта запроса имеют интуитивно понятные имена, поэтому я сразу приведу готовый пример, который создает новую таблицу и наполняет ее целыми числами и их квадратами:
#include
#include
using namespace Upp;
CONSOLE _ APP _ MAIN{
Sqlite3Session session; if(!session.Open(ConfigFile("simple.db"))) {
Cout() << "Can't create or open database filen";
return;
}
#ifdef _ DEBUG
session.SetTrace();
#endif
SQL = session;
Sql db;
db.Execute("drop table TEST"); // Удалить таблицу, если она уже есть db.ClearError(); // Очистить буфер ошибок
// Создать таблицу. Первый столбец — число, второй — его квадрат // в текстовом виде
db.Execute("create table TEST (A INTEGER, B TEXT)"); // Наполняем таблицу for(int i = 0; i < 10;
db.Execute("insert into TEST(A, B) values (?, ?)", J i, AsString(i * i)); // Выборка из таблицы db.Execute("select * from TEST"); // Выводим имена колонок for(int i = 0; i < db.GetColumns(); i++)
Cout() << db.GetColumnInfo(i).name << "n"; // Выводим значения while(db.Fetch())
Cout() << db[0] << " '" << db[1] << "'n";
ReadStdIn(); // Чтобы консольное окно не закрывалось
}

В запросе Execute можно (и нужно) использовать «заполнители» (placeholders). На место знаков «?» вставляются передаваемые дальнейшими параметрами данные наподобие функции printf(). Метод Fetch() обеспечивает итерацию по строкам запроса, а доступ к столбцам осуществляется по индексу оператором [].

Рейтинг статьи

Оценка
5/5
голосов: 4
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх