Функция
QSqlDriver *driver = QSqlDatabase::database.driver;
if (driver->hasFeature(QSqlDriver::Transactions))
…
Можно проверить наличие в базе данных ряда других возможностей, включая поддержку объектов BLOB (Binary Large Objects — большие двоичные объекты),
В приводимых до сих пор примерах мы предполагали, что в приложении используется одно соединение с базой данных. Если мы хотим создать несколько соединений, мы можем передавать название соединения в качестве второго аргумента функции
QSqlDatabase *db = QSqlDatabase::addDatabase("QPSQL", "OTHER");
db. setHostName("saturn.mcmanamy.edu");
db.setDatabaseName("starsdb");
db.setUserName("hilbert");
db.setPassword("ixtapa7");
Мы можем затем получить указатель на объект
QSqlDatabase db = QSqlDatabase::database("OTHER");
Для выполнения запросов с другим соединением мы передаем объект QSqlDatabase конструктору QSqlQuery:
QSqlQuery query(db);
query.exec("SELECT id FROM artist WHERE name = 'Mando Diao'");
Несколько соединений полезны, если мы хотим выполнять одновременно несколько транзакций, поскольку каждое соединение может использоваться только для одной активной транзакции. Когда мы используем несколько соединений с базой данных, мы можем все-таки иметь одно непоименованное соединение и
Кроме
Ниже приводится пример использования
QSqlTableModel model;
model.setTable("cd");
model.setFilter("year >= 1998");
model.select;
Это эквивалентно запросу
SELECT * FROM cd WHERE year >= 1998
Просмотр результирующего набора выполняется путем получения заданной записи функцией
for (int i = 0; i < model.rowCount; ++i) {
QSqlRecord record = model.record(i);
QString title = record.value("title").toString;
int year = record.value("year").toInt;
cerr << qPrintable(title) << ": " << year << endl;
}
Функция
int titleIndex = model.record.indexOf("title");
int yearIndex = model.record.indexOf("year");
for (int i = 0; i < model.rowCount; ++i) {
QSqlRecord record = model.record(i);
QString title = record.value(titleIndex).toString;
int year = record.value(yearIndex).toInt;
cerr << qPrintable(title) << ": " << year << endl;
}