Модуль
Связь с базой данных обеспечивается объектом
QDB2 — IBM DB2 версии 7.1 и выше,
QIBASE — InterBase компании Borland,
QMYSQL — MySQL,
QOCI — Oracle (Oracle Call Interface, интерфейс вызовов Oracle),
QODBC — ODBC (включает Microsoft SQL Server),
QPSQL — PostgreSQL версий 6.x и 7.x,
QSQLITE — SQLite версии 3 и выше,
QSQLITE2 — SQLite версии 2,
QTDS — Sybase Adaptive Server.
Из-за лицензионных ограничений не все драйверы входят в состав издания Qt с открытым исходным кодом (Qt Open Source Edition). При настройке конфигурации Qt драйверы SQL можно либо непосредственно включить в состав Qt, либо использовать как подключаемые модули (plugins). Qt поставляется вместе с SQLite — общедоступной, не нуждающейся в сервере базой данных.
Для пользователей, хорошо знакомых с синтаксисом SQL, класс
Qt также позволяет легко программировать такие распространенные идиомы баз данных, как отображение зависимых представлений для записей, связанных отношением «главная—подчиненные» (master—detail), и возможность многократной детализации выводимых на экран данных (drill-down), что продемонстрируют некоторые примеры этой главы.
Соединение с базой данных и выполнение запросов
Для выполнения запросов SQL мы должны сначала установить соединение с базой данных. Обычно настройка соединений с базой данных выполняется отдельной функцией, которую мы вызываем при запуске приложения. Например:
01 bool createConnection()
02 {
03 QSqlDatabase *db = QSqlDatabase::addDatabase("QOCI8");
04 db->setHostName("mozart.konkordia.edu");
05 db->setDatabaseName("musicdb");
06 db->setUserName("gbatstone");
07 db->setPassword("T17aV44");
08 if (!db->open()) {
09 db->lastError().showMessage();
10 return false;
11 }
12 return true;
13 }
Во-первых, мы вызываем функцию
Затем мы устанавливаем имя хоста базы данных, имя базы данных, имя пользователя и пароль, и мы открываем соединение. Если функция
Обычно функцию
01 int main(int argc, char *argv[])
02 {
03 QApplication app(argc, argv);
04 if (!createConnection())
05 return 1;
06 return app.exec();
07 }
После установки соединения мы можем применять
QSqlQuery query;
query.exec("SELECT title, year FROM cd WHERE year >= 1998");
После вызова функции