Spec-Zone.ru › Qt 6.1

Класс QSqlDatabase

Класс QSqlDatabase обрабатывает подключение к базе данных. Подробнее...

Заголовок: #include <QSqlDatabase>
CMake: find_package(Qt6 COMPONENTS Sql REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql
  • Список всех членов, включая унаследованные

Открытые функции

QSqlDatabase(const QSqlDatabase &other)
QSqlDatabase()
QSqlDatabase & operator=(const QSqlDatabase &other)
~QSqlDatabase()
void close()
bool commit()
QString connectOptions() const
QString connectionName() const
QString databaseName() const
QSqlDriver * driver() const
QString driverName() const
QSqlQuery exec(const QString &query = QString()) const
QString hostName() const
bool isOpen() const
bool isOpenError() const
bool isValid() const
QSqlError lastError() const
QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const
bool open()
bool open(const QString &user, const QString &password)
QString password() const
int port() const
QSqlIndex primaryIndex(const QString &tablename) const
QSqlRecord record(const QString &tablename) const
bool rollback()
void setConnectOptions(const QString &options = QString())
void setDatabaseName(const QString &name)
void setHostName(const QString &host)
void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
void setPassword(const QString &password)
void setPort(int port)
void setUserName(const QString &name)
QStringList tables(QSql::TableType type = QSql::Tables) const
bool transaction()
QString userName() const

Статические открытые члены

QSqlDatabase addDatabase(const QString &type, const QString &connectionName = QLatin1String(defaultConnection))
QSqlDatabase addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1String(defaultConnection))
QSqlDatabase cloneDatabase(const QSqlDatabase &other, const QString &connectionName)
QSqlDatabase cloneDatabase(const QString &other, const QString &connectionName)
QStringList connectionNames()
bool contains(const QString &connectionName = QLatin1String(defaultConnection))
QSqlDatabase database(const QString &connectionName = QLatin1String(defaultConnection), bool open = true)
QStringList drivers()
bool isDriverAvailable(const QString &name)
void registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator)
void removeDatabase(const QString &connectionName)

Защищенные функции

QSqlDatabase(QSqlDriver *driver)
QSqlDatabase(const QString &type)

Подробное описание

Класс QSqlDatabase предоставляет интерфейс для доступа к базе данных через подключение. Экземпляр QSqlDatabase представляет подключение. Подключение обеспечивает доступ к базе данных через один из поддерживаемых драйверов баз данных, которые являются производными от QSqlDriver. В качестве альтернативы, вы можете создать свой собственный драйвер базы данных, производный от QSqlDriver. См. Как написать свой собственный драйвер базы данных для получения дополнительной информации.

Создайте соединение (то есть экземпляр QSqlDatabase), вызвав одну из статических функций addDatabase(), где вы указываете драйвер или тип драйвера для использования (в зависимости от типа базы данных) и имя соединения. Соединение известно по своему имени, а не по имени базы данных, к которой оно подключено. Вы можете иметь несколько соединений с одной базой данных. QSqlDatabase также поддерживает концепцию по умолчанию соединения, которое является безымянным соединением. Для создания соединения по умолчанию не передавайте аргумент имени соединения при вызове addDatabase(). Впоследствии, соединение по умолчанию будет предполагаться, если вы вызываете любую статическую функцию без указания имени соединения. Следующий фрагмент показывает, как создать и открыть соединение по умолчанию с базой данных PostgreSQL:

    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("acidalia");
    db.setDatabaseName("customdb");
    db.setUserName("mojito");
    db.setPassword("J0a1m8");
    bool ok = db.open();

После того, как объект QSqlDatabase был создан, задайте параметры соединения с помощью setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort() и setConnectOptions(). Затем вызовите open(), чтобы активировать физическое подключение к базе данных. Соединение не пригодно для использования, пока вы его не откроете.

Определённое выше соединение будет соединением по умолчанию, потому что мы не передали имя соединения функции addDatabase(). Впоследствии, вы можете получить соединение по умолчанию, вызвав database() без аргумента имени соединения:

    QSqlDatabase db = QSqlDatabase::database();

QSqlDatabase — это класс значений. Изменения, внесённые в соединение с базой данных через один экземпляр QSqlDatabase, повлияют на другие экземпляры QSqlDatabase, представляющие то же самое соединение. Используйте cloneDatabase(), чтобы создать независимое соединение с базой данных, основанное на существующем.

Предупреждение: Сильно рекомендуется не хранить копию QSqlDatabase в качестве члена класса, так как это помешает корректному очищению экземпляра при завершении работы. Если вам нужно получить доступ к существующему QSqlDatabase, к нему следует обращаться с помощью database(). Если вы решили иметь переменную-член QSqlDatabase, её необходимо удалить до удаления экземпляра QCoreApplication, иначе это может привести к неопределённому поведению.

Если вы создаёте несколько подключений к базам данных, укажите уникальное имя соединения для каждого из них при вызове addDatabase(). Используйте database() с именем соединения, чтобы получить это соединение. Используйте removeDatabase() с именем соединения, чтобы удалить соединение. QSqlDatabase выведет предупреждение, если вы попытаетесь удалить соединение, на которое ссылаются другие объекты QSqlDatabase. Используйте contains(), чтобы проверить, есть ли данное имя соединения в списке соединений.

Некоторые служебные методы:
tables() возвращает список таблиц
primaryIndex() возвращает первичный индекс таблицы
record() возвращает метаинформацию о полях таблицы
transaction() инициализирует транзакцию
commit() сохраняет и завершает транзакцию
rollback() отменяет транзакцию
hasFeature() проверяет, поддерживает ли драйвер транзакции
lastError() возвращает информацию об ошибке
drivers() возвращает имена доступных SQL-драйверов
isDriverAvailable() проверяет, доступен ли конкретный драйвер
registerSqlDriver() регистрация пользовательского драйвера

Примечание: QSqlDatabase::exec() устарел. Используйте QSqlQuery::exec() вместо него.

Примечание: При использовании транзакций необходимо инициировать транзакцию до создания запроса.

См. также QSqlDriver, QSqlQuery, Qt SQL и Модули потоков и SQL-модуль.

Документация по функциям-членам

[protected] QSqlDatabase::QSqlDatabase(QSqlDriver *driver)

Это перегруженная функция.

Создаёт подключение к базе данных, используя предоставленный драйвер.

[protected] QSqlDatabase::QSqlDatabase(const QString &type)

Это перегруженная функция.

Создаёт подключение QSqlDatabase, которое использует драйвер, указанный в type. Если type не распознан, подключение к базе данных не будет функциональным.

Доступные типы драйверов:

Тип драйвера Описание
QDB2 IBM DB2
QIBASE Драйвер Borland InterBase
QMYSQL Драйвер MySQL
QOCI Драйвер Oracle Call Interface
QODBC Драйвер ODBC (включает Microsoft SQL Server)
QPSQL Драйвер PostgreSQL
QSQLITE SQLite версии 3 или выше

Дополнительные сторонние драйверы, включая ваши собственные настраиваемые драйверы, могут загружаться динамически.

См. также SQL-драйверы баз данных, registerSqlDriver() и drivers().

QSqlDatabase::QSqlDatabase(const QSqlDatabase &other)

Создаёт копию other.

QSqlDatabase::QSqlDatabase()

Создаёт пустой, недействительный объект QSqlDatabase. Используйте addDatabase(), removeDatabase() и database() для получения действительных объектов QSqlDatabase.

QSqlDatabase &QSqlDatabase::operator=(const QSqlDatabase &other)

Присваивает other этому объекту.

QSqlDatabase::~QSqlDatabase()

Уничтожает объект и освобождает все выделенные ресурсы.

Примечание: Когда последний объект подключения уничтожается, деструктор неявно вызывает close() для освобождения подключения к базе данных.

См. также close().

[static] QSqlDatabase QSqlDatabase::addDatabase(const QString &type, const QString &connectionName = QLatin1String(defaultConnection))

Добавляет базу данных в список подключений к базам данных, используя драйвер type и имя соединения connectionName. Если уже существует подключение к базе данных с именем connectionName, оно удаляется.

Подключение к базе данных обозначается именем connectionName. Возвращается вновь добавленное подключение к базе данных.

Если type недоступен или не может быть загружен, isValid() возвращает false.

Если connectionName не указан, новое соединение становится соединением по умолчанию для приложения, и последующие вызовы database() без аргумента имени соединения вернут соединение по умолчанию. Если connectionName предоставлен здесь, используйте database(connectionName) для извлечения подключения.

Предупреждение: Если вы добавите подключение с тем же именем, что и существующее подключение, новое подключение заменит старое. Если вы вызываете эту функцию более одного раза без указания connectionName, соединение по умолчанию будет заменено.

Перед использованием подключения оно должно быть инициализировано. Например, вызовите некоторые или все из setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort() и setConnectOptions(), и, наконец, open().

Примечание: Эта функция безопасна для многопоточных приложений.

См. также database(), removeDatabase() и Модули потоков и SQL-модуль.

[static] QSqlDatabase QSqlDatabase::addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1String(defaultConnection))

Этот перегруз используется, когда вы хотите создать подключение к базе данных с драйвером, который вы инициализировали самостоятельно. Это может быть ваш собственный драйвер базы данных, или вам просто нужно инициализировать один из драйверов Qt самостоятельно. Если вы это сделаете, рекомендуется включить код драйвера в своё приложение. Например, вы можете создать подключение к PostgreSQL с вашим собственным драйвером QPSQL следующим образом:

PGconn *con = PQconnectdb("host=server user=bart password=simpson dbname=springfield");
QPSQLDriver *drv = new QPSQLDriver(con);
QSqlDatabase db = QSqlDatabase::addDatabase(drv); // becomes the new default connection
QSqlQuery query;
query.exec("SELECT NAME, ID FROM STAFF");

Приведенный выше код устанавливает подключение к PostgreSQL и создаёт объект QPSQLDriver. Затем вызывается addDatabase() для добавления подключения к известным подключениям, чтобы его можно было использовать классами Qt SQL. При создании драйвера с дескриптором подключения (или набором дескрипторов) Qt предполагает, что вы уже открыли базу данных.

Примечание: Мы предполагаем, что qtdir — это каталог установки Qt. Это подтянет код, необходимый для использования библиотеки PostgreSQL и создания объекта QPSQLDriver, при условии, что у вас есть заголовочные файлы PostgreSQL в пути поиска заголовков.

Не забудьте связать ваше приложение с библиотекой клиента базы данных. Убедитесь, что библиотека клиента находится в пути поиска компоновщика и добавьте строки в ваш файл .pro:

unix:LIBS += -lpq
win32:LIBS += libpqdll.lib

Описанный метод работает для всех предоставленных драйверов. Единственное различие будет в аргументах конструктора драйвера. Вот таблица драйверов, включённых в Qt, их файлов исходного кода и аргументов конструктора:

Драйвер Имя класса Аргументы конструктора Файл для включения
QPSQL QPSQLDriver PGconn *connection qsql_psql.cpp
QMYSQL QMYSQLDriver MYSQL *connection qsql_mysql.cpp
QOCI QOCIDriver OCIEnv *environment, OCISvcCtx *serviceContext qsql_oci.cpp
QODBC QODBCDriver SQLHANDLE environment, SQLHANDLE connection qsql_odbc.cpp
QDB2 QDB2 SQLHANDLE environment, SQLHANDLE connection qsql_db2.cpp
QSQLITE QSQLiteDriver sqlite *connection qsql_sqlite.cpp
QIBASE QIBaseDriver isc_db_handle connection qsql_ibase.cpp

Предупреждение: Добавление подключения к базе данных с тем же именем подключения, что и существующее подключение, приводит к замене существующего подключения новым.

Предупреждение: Модуль SQL принимает во владение драйвер. Его нельзя удалять. Для удаления подключения используйте removeDatabase().

См. также drivers().

[static] QSqlDatabase QSqlDatabase::cloneDatabase(const QSqlDatabase &other, const QString &connectionName)

Клонирует подключение к базе данных other и сохраняет его как connectionName. Все настройки из исходной базы данных, например, databaseName(), hostName() и т.д., копируются. Ничего не делает, если other — это недействительная база данных. Возвращает созданное подключение к базе данных.

Примечание: Новое подключение не открыто. Перед использованием нового подключения необходимо вызвать open().

[static, since 5.13] QSqlDatabase QSqlDatabase::cloneDatabase(const QString &other, const QString &connectionName)

Это перегруженный метод.

Клонирует подключение к базе данных other и сохраняет его как connectionName. Все настройки из исходной базы данных, например, databaseName(), hostName() и т.д., копируются. Ничего не делает, если other — это недействительная база данных. Возвращает созданное подключение к базе данных.

Примечание: Новое подключение не открыто. Перед использованием нового подключения необходимо вызвать open().

Эта перегрузка полезна при клонировании базы данных в другом потоке, отличном от потока, используемого базой данных, представленной other.

Эта функция была добавлена в Qt 5.13.

void QSqlDatabase::close()

Закрывает подключение к базе данных, освобождая все занятые ресурсы и делая недействительными все существующие объекты QSqlQuery, используемые с базой данных.

Это также повлияет на копии этого объекта QSqlDatabase.

См. также removeDatabase().

bool QSqlDatabase::commit()

Выполняет фиксацию транзакции в базе данных, если драйвер поддерживает транзакции и была запущена транзакция transaction(). Возвращает true , если операция выполнена успешно. В противном случае возвращает false.

Примечание: Для некоторых баз данных фиксация транзакции завершится ошибкой и вернёт false , если существует активный запрос, использующий базу данных для SELECT. Сделайте запрос неактивным перед выполнением фиксации.

Вызовите lastError() для получения информации об ошибках.

См. также QSqlQuery::isActive(), QSqlDriver::hasFeature() и rollback().

QString QSqlDatabase::connectOptions() const

Возвращает строку параметров подключения, используемую для этого подключения. Строка может быть пустой.

См. также setConnectOptions().

QString QSqlDatabase::connectionName() const

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

Примечание: Имя подключения не является именем базы данных.

См. также addDatabase().

[static] QStringList QSqlDatabase::connectionNames()

Возвращает список, содержащий имена всех подключений.

Примечание: Эта функция безопасна для использования в нескольких потоках.

См. также contains(), database() и Потоки и модуль SQL.

[static] bool QSqlDatabase::contains(const QString &connectionName = QLatin1String(defaultConnection))

Возвращает true , если список подключений к базам данных содержит connectionName; в противном случае возвращает false.

Примечание: Эта функция безопасна для использования в нескольких потоках.

См. также connectionNames(), database() и Потоки и модуль SQL.

[static] QSqlDatabase QSqlDatabase::database(const QString &connectionName = QLatin1String(defaultConnection), bool open = true)

Возвращает подключение к базе данных с именем connectionName. Подключение к базе данных должно быть добавлено ранее с помощью addDatabase(). Если open имеет значение true (по умолчанию), и подключение к базе данных ещё не открыто, оно открывается сейчас. Если connectionName не указана, используется подключение по умолчанию. Если connectionName не существует в списке баз данных, возвращается недействительное подключение.

Примечание: Эта функция безопасна для использования в нескольких потоках.

См. также isOpen() и Потоки и модуль SQL.

QString QSqlDatabase::databaseName() const

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

Примечание: Имя базы данных не является именем подключения.

См. также setDatabaseName().

QSqlDriver *QSqlDatabase::driver() const

Возвращает драйвер базы данных, используемый для доступа к подключению к базе данных.

См. также addDatabase() и drivers().

QString QSqlDatabase::driverName() const

Возвращает имя драйвера подключения.

См. также addDatabase() и driver().

[static] QStringList QSqlDatabase::drivers()

Возвращает список всех доступных драйверов баз данных.

См. также registerSqlDriver().

QSqlQuery QSqlDatabase::exec(const QString &query = QString()) const

Выполняет SQL-запрос в базе данных и возвращает объект QSqlQuery. Используйте lastError() для получения информации об ошибках. Если query пуста, возвращается пустой, недействительный запрос, и lastError() не изменяется.

См. также QSqlQuery и lastError().

QString QSqlDatabase::hostName() const

Возвращает имя хоста подключения; оно может быть пустым.

См. также setHostName().

[static] bool QSqlDatabase::isDriverAvailable(const QString &name)

Возвращает true если драйвер с именем name доступен; в противном случае возвращает false.

См. также drivers().

bool QSqlDatabase::isOpen() const

Возвращает true если подключение к базе данных в настоящее время открыто; в противном случае возвращает false.

bool QSqlDatabase::isOpenError() const

Возвращает true если при открытии подключения к базе данных произошла ошибка; в противном случае возвращает false. Информацию об ошибке можно получить, используя функцию lastError().

bool QSqlDatabase::isValid() const

Возвращает true если у QSqlDatabase есть действительный драйвер.

Пример:

QSqlDatabase db;
qDebug() << db.isValid();    // Returns false

db = QSqlDatabase::database("sales");
qDebug() << db.isValid();    // Returns \c true if "sales" connection exists

QSqlDatabase::removeDatabase("sales");
qDebug() << db.isValid();    // Returns false

QSqlError QSqlDatabase::lastError() const

Возвращает информацию об последней ошибке, произошедшей в базе данных.

Ошибки, возникающие в контексте отдельного запроса, сообщаются функцией QSqlQuery::lastError().

См. также QSqlError и QSqlQuery::lastError().

QSql::NumericalPrecisionPolicy QSqlDatabase::numericalPrecisionPolicy() const

Возвращает текущую политику точности чисел для подключения к базе данных.

См. также QSql::NumericalPrecisionPolicy, setNumericalPrecisionPolicy(), QSqlQuery::numericalPrecisionPolicy() и QSqlQuery::setNumericalPrecisionPolicy().

bool QSqlDatabase::open()

Открывает подключение к базе данных, используя текущие значения подключения. Возвращает true при успехе; в противном случае возвращает false. Информацию об ошибке можно получить, используя lastError().

См. также lastError(), setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort() и setConnectOptions().

bool QSqlDatabase::open(const QString &user, const QString &password)

Это перегруженная функция.

Открывает подключение к базе данных с заданным именем пользователя user и паролем password. Возвращает true при успехе; в противном случае возвращает false. Информацию об ошибке можно получить, используя функцию lastError().

Эта функция не сохраняет полученный пароль. Вместо этого пароль передается непосредственно драйверу для открытия подключения и затем удаляется.

См. также lastError().

QString QSqlDatabase::password() const

Возвращает пароль подключения. Пустая строка возвращается, если пароль не был задан с помощью setPassword(), и если пароль был передан в вызове open(), или если пароль не использовался.

См. также setPassword().

int QSqlDatabase::port() const

Возвращает номер порта подключения. Значение не определено, если номер порта не был задан.

См. также setPort().

QSqlIndex QSqlDatabase::primaryIndex(const QString &tablename) const

Возвращает первичный индекс для таблицы tablename. Если первичный индекс не существует, возвращается пустой QSqlIndex.

Примечание: Некоторые драйверы, такие как драйвер QPSQL, могут потребовать передачи tablename в нижнем регистре, если таблица не была обрамлена кавычками при создании. См. документацию по драйверам Qt SQL для получения дополнительной информации.

См. также tables() и record().

QSqlRecord QSqlDatabase::record(const QString &tablename) const

Возвращает QSqlRecord, заполненный именами всех полей в таблице (или представлении) с именем tablename. Порядок, в котором поля появляются в записи, не определён. Если такая таблица (или представление) не существует, возвращается пустая запись.

Примечание: Некоторые драйверы, такие как драйвер QPSQL, могут потребовать передачи tablename в нижнем регистре, если таблица не была обрамлена кавычками при создании. См. документацию по драйверам Qt SQL для получения дополнительной информации.

[static] void QSqlDatabase::registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator)

Эта функция регистрирует новый SQL-драйвер с именем name в рамках SQL-фреймворка. Это полезно, если у вас есть пользовательский SQL-драйвер, и вы не хотите компилировать его как плагин.

Пример:

QSqlDatabase::registerSqlDriver("MYDRIVER", new QSqlDriverCreator<QSqlDriver>);
QVERIFY(QSqlDatabase::drivers().contains("MYDRIVER"));
QSqlDatabase db = QSqlDatabase::addDatabase("MYDRIVER");
QVERIFY(db.isValid());

QSqlDatabase принимает владение указателем creator, поэтому вам не нужно удалять его самостоятельно.

См. также drivers().

[static] void QSqlDatabase::removeDatabase(const QString &connectionName)

Удаляет подключение к базе данных connectionName из списка подключений к базам данных.

Предупреждение: При вызове этой функции не должно быть открытых запросов к базе данных, в противном случае произойдёт утечка ресурсов.

Пример:

// WRONG
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
QSqlDatabase::removeDatabase("sales"); // will output a warning
// "db" is now a dangling invalid database connection,
// "query" contains an invalid result set

Правильный способ сделать это:

{
    QSqlDatabase db = QSqlDatabase::database("sales");
    QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
}
// Both "db" and "query" are destroyed because they are out of scope
QSqlDatabase::removeDatabase("sales"); // correct

Чтобы удалить подключение по умолчанию, которое, возможно, было создано с помощью вызова addDatabase() без указания имени подключения, вы можете получить имя подключения по умолчанию, вызвав connectionName() на базе данных, возвращаемой database(). Обратите внимание, что если база данных по умолчанию не была создана, будет возвращена некорректная база данных.

Примечание: Эта функция безопасна для многопоточных программ.

См. также database(), connectionName() и Многопоточность и модуль SQL.

bool QSqlDatabase::rollback()

Откатывает транзакцию в базе данных, если драйвер поддерживает транзакции и была начата транзакция с помощью transaction(). Возвращает true если операция прошла успешно. В противном случае возвращает false.

Примечание: Для некоторых баз данных откат завершится ошибкой и вернёт false если существует активный запрос, использующий базу данных для SELECT. Сделайте запрос неактивным перед выполнением отката.

Вызовите lastError() для получения информации об ошибках.

См. также QSqlQuery::isActive(), QSqlDriver::hasFeature() и commit().

void QSqlDatabase::setConnectOptions(const QString &options = QString())

Устанавливает параметры, специфичные для базы данных options. Это необходимо сделать до открытия подключения, в противном случае это не повлияет. Другой вариант — закрыть подключение, вызвать QSqlDatabase::setConnectOptions() и снова открыть подключение с помощью open().

Формат строки options — это список параметров, разделённых точкой с запятой, или пары параметр=значение. Параметры зависят от используемого клиента базы данных:

ODBC MySQL PostgreSQL
  • SQL_ATTR_ACCESS_MODE
  • SQL_ATTR_LOGIN_TIMEOUT
  • SQL_ATTR_CONNECTION_TIMEOUT
  • SQL_ATTR_CURRENT_CATALOG
  • SQL_ATTR_METADATA_ID
  • SQL_ATTR_PACKET_SIZE
  • SQL_ATTR_TRACEFILE
  • SQL_ATTR_TRACE
  • SQL_ATTR_CONNECTION_POOLING
  • SQL_ATTR_ODBC_VERSION
  • CLIENT_COMPRESS
  • CLIENT_FOUND_ROWS
  • CLIENT_IGNORE_SPACE
  • CLIENT_ODBC
  • CLIENT_NO_SCHEMA
  • CLIENT_INTERACTIVE
  • UNIX_SOCKET
  • MYSQL_OPT_RECONNECT
  • MYSQL_OPT_CONNECT_TIMEOUT
  • MYSQL_OPT_READ_TIMEOUT
  • MYSQL_OPT_WRITE_TIMEOUT
  • SSL_KEY
  • SSL_CERT
  • SSL_CA
  • SSL_CAPATH
  • SSL_CIPHER
  • connect_timeout
  • options
  • tty
  • requiressl
  • service
DB2 OCI
  • SQL_ATTR_ACCESS_MODE
  • SQL_ATTR_LOGIN_TIMEOUT
  • OCI_ATTR_PREFETCH_ROWS
  • OCI_ATTR_PREFETCH_MEMORY
SQLite Interbase
  • QSQLITE_BUSY_TIMEOUT
  • QSQLITE_OPEN_READONLY
  • QSQLITE_OPEN_URI
  • QSQLITE_ENABLE_SHARED_CACHE
  • QSQLITE_ENABLE_REGEXP
  • QSQLITE_NO_USE_EXTENDED_RESULT_CODES
  • ISC_DPB_LC_CTYPE
  • ISC_DPB_SQL_ROLE_NAME

Примеры:

db.setConnectOptions("SSL_KEY=client-key.pem;SSL_CERT=client-cert.pem;SSL_CA=ca-cert.pem;CLIENT_IGNORE_SPACE=1"); // use an SSL connection to the server
if (!db.open()) {
    db.setConnectOptions(); // clears the connect option string
    // ...
}
// ...
// PostgreSQL connection
db.setConnectOptions("requiressl=1"); // enable PostgreSQL SSL connections
if (!db.open()) {
    db.setConnectOptions(); // clear options
    // ...
}
// ...
// ODBC connection
db.setConnectOptions("SQL_ATTR_ACCESS_MODE=SQL_MODE_READ_ONLY;SQL_ATTR_TRACE=SQL_OPT_TRACE_ON"); // set ODBC options
if (!db.open()) {
    db.setConnectOptions(); // don't try to set this option
    // ...
}
}

Для получения дополнительной информации о различных параметрах обратитесь к документации клиентской библиотеки.

См. также connectOptions().

void QSqlDatabase::setDatabaseName(const QString &name)

Устанавливает имя базы данных подключения на name. Для действия, имя базы данных должно быть установлено до открытия подключения. В качестве альтернативы, можно закрыть подключение close(), установить имя базы данных и снова вызвать open().

Примечание: Имя базы данных не является именем подключения. Имя подключения должно быть передано в addDatabase() при создании объекта подключения.

Для драйвера QSQLITE, если указанное имя базы данных не существует, то он создаст файл для вас, если не установлено опция QSQLITE_OPEN_READONLY.

Кроме того, name может быть установлено в ":memory:", что создаст временную базу данных, доступную только на время работы приложения.

Для драйвера QOCI (Oracle) имя базы данных — это имя службы TNS.

Для драйвера QODBC, name может быть DSN, именем файла DSN (в этом случае файл должен иметь расширение .dsn) или строкой подключения.

Например, пользователи Microsoft Access могут использовать следующую строку подключения для открытия файла .mdb напрямую, вместо создания записи DSN в менеджере ODBC:

// ...
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=myaccessfile.mdb");
if (db.open()) {
    // success!
}
// ...

Значение по умолчанию отсутствует.

См. также databaseName(), setUserName(), setPassword(), setHostName(), setPort(), setConnectOptions() и open().

void QSqlDatabase::setHostName(const QString &host)

Устанавливает имя хоста подключения на host. Для действия, имя хоста должно быть установлено до открытия подключения. В качестве альтернативы, можно закрыть подключение close(), установить имя хоста и снова вызвать open().

Значение по умолчанию отсутствует.

См. также hostName(), setUserName(), setPassword(), setDatabaseName(), setPort(), setConnectOptions() и open().

void QSqlDatabase::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)

Устанавливает политику точности числовых значений по умолчанию, используемую запросами, созданными на этом подключении к базе данных, на precisionPolicy.

Примечание: Драйверы, которые не поддерживают извлечение числовых значений с низкой точностью, проигнорируют политику точности. Вы можете использовать QSqlDriver::hasFeature(), чтобы узнать, поддерживает ли драйвер эту функцию.

Примечание: Установка политики точности по умолчанию на precisionPolicy не влияет на активные запросы.

См. также QSql::NumericalPrecisionPolicy, numericalPrecisionPolicy(), QSqlQuery::setNumericalPrecisionPolicy() и QSqlQuery::numericalPrecisionPolicy().

void QSqlDatabase::setPassword(const QString &password)

Устанавливает пароль подключения на password. Для действия, пароль должен быть установлен до открытия подключения. В качестве альтернативы, можно закрыть подключение close(), установить пароль и снова вызвать open().

Значение по умолчанию отсутствует.

Предупреждение: Эта функция хранит пароль в виде обычного текста в Qt. Используйте вызов open() с параметром пароля, чтобы избежать этого.

См. также password(), setUserName(), setDatabaseName(), setHostName(), setPort(), setConnectOptions() и open().

void QSqlDatabase::setPort(int port)

Устанавливает номер порта подключения на port. Для действия, номер порта должен быть установлен до открытия подключения. В качестве альтернативы, можно закрыть подключение close(), установить номер порта и снова вызвать open().

Значение по умолчанию отсутствует.

См. также port(), setUserName(), setPassword(), setHostName(), setDatabaseName(), setConnectOptions() и open().

void QSqlDatabase::setUserName(const QString &name)

Устанавливает имя пользователя подключения на name. Для действия, имя пользователя должно быть установлено до открытия подключения. В качестве альтернативы, можно закрыть подключение close(), установить имя пользователя и снова вызвать open().

Значение по умолчанию отсутствует.

См. также userName(), setDatabaseName(), setPassword(), setHostName(), setPort(), setConnectOptions() и open().

QStringList QSqlDatabase::tables(QSql::TableType type = QSql::Tables) const

Возвращает список таблиц базы данных, системных таблиц и представлений, как указано в параметре type.

См. также primaryIndex() и record().

bool QSqlDatabase::transaction()

Начинает транзакцию в базе данных, если драйвер её поддерживает. Возвращает true если операция выполнена успешно. В противном случае возвращает false.

См. также QSqlDriver::hasFeature(), commit() и rollback().

QString QSqlDatabase::userName() const

Возвращает имя пользователя подключения; оно может быть пустым.

См. также setUserName().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qsqldatabase.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API