Класс QSqlDatabase
Класс QSqlDatabase обрабатывает подключение к базе данных. Подробнее...
| Заголовок: | #include <QSqlDatabase> |
| 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. См. Как написать собственный драйвер базы данных для получения дополнительной информации.
END_OF_DOCUMENT_MARKERСоздайте соединение (т.е., экземпляр 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)
Это перегруженная функция.
Создаёт подключение к базе данных, используя указанный 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 или выше |
| QSQLITE2 | SQLite версии 2 |
| QTDS | Sybase Adaptive Server |
Дополнительные драйверы сторонних производителей, включая ваши собственные настраиваемые драйверы, могут загружаться динамически.
См. также Драйверы баз данных 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 где-то в пути поиска include.
Помните, что вы должны связать ваше приложение с библиотекой клиента базы данных. Убедитесь, что библиотека клиента находится в пути поиска вашего линкера и добавьте строки, подобные этим, в свой файл .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 |
| QTDS | QTDSDriver | LOGINREC *loginRecord, DBPROCESS *dbProcess, const QString &hostName | qsql_tds.cpp |
| QSQLITE | QSQLiteDriver | sqlite *connection | qsql_sqlite.cpp |
| QIBASE | QIBaseDriver | isc_db_handle connection | qsql_ibase.cpp |
Имя хоста (или имя службы) требуется при построении QTDSDriver для создания новых подключений для внутренних запросов. Это необходимо для предотвращения блокировки, когда несколько объектов QSqlQuery используются одновременно.
Предупреждение: Добавление подключения к базе данных с тем же именем подключения, что и у существующего подключения, приводит к замене существующего подключения новым.
Предупреждение: Фреймворк SQL принимает во владение драйвер. Его нельзя удалять. Для удаления подключения используйте removeDatabase().
См. также drivers().
[static] QSqlDatabase QSqlDatabase::cloneDatabase(const QSqlDatabase &other, const QString &connectionName)
Создаёт копию подключения к базе данных other и сохраняет её как connectionName. Все настройки из исходной базы данных, например databaseName(), hostName() и т. д., копируются. Ничего не делает, если other — недопустимая база данных. Возвращает новосозданное подключение к базе данных.
Примечание: Новое подключение не открыто. Перед использованием нового подключения необходимо вызвать open().
[static] 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
Возвращает имя подключения, которое может быть пустым.
Примечание: Имя подключения — это не имя базы данных.
Эта функция была введена в Qt 4.4.
См. также 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
Возвращает текущую политику точности для подключения к базе данных.
Эта функция была добавлена в Qt 4.6.
См. также 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 |
|---|---|---|
|
|
|
| DB2 | OCI | TDS |
|
|
none |
| SQLite | Interbase | |
|
|
Примеры:
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. Для действия имя базы данных должно быть установлено до подключения. В качестве альтернативы можно закрыть соединение, установить имя базы данных и снова вызвать 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. Для действия имя хоста должно быть установлено до подключения. В качестве альтернативы можно закрыть соединение, установить имя хоста и снова вызвать open().
Значение по умолчанию отсутствует.
См. также hostName(), setUserName(), setPassword(), setDatabaseName(), setPort(), setConnectOptions(), и open().
void QSqlDatabase::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
Устанавливает политику точности чисел по умолчанию, используемую запросами, созданными на этом подключении к базе данных, на precisionPolicy.
Примечание: Драйверы, которые не поддерживают извлечение числовых значений с низкой точностью, проигнорируют политику точности. Вы можете использовать QSqlDriver::hasFeature(), чтобы узнать, поддерживает ли драйвер эту функцию.
Примечание: Установка политики точности по умолчанию на precisionPolicy не влияет на текущие активные запросы.
Эта функция была добавлена в Qt 4.6.
См. также QSql::NumericalPrecisionPolicy, numericalPrecisionPolicy(), QSqlQuery::setNumericalPrecisionPolicy(), и QSqlQuery::numericalPrecisionPolicy().
void QSqlDatabase::setPassword(const QString &password)
Устанавливает пароль подключения на password. Для действия пароль должен быть установлен до подключения. В качестве альтернативы можно закрыть соединение, установить пароль и снова вызвать open().
Значение по умолчанию отсутствует.
Предупреждение: Эта функция хранит пароль в виде обычного текста в Qt. Используйте вызов open(), который принимает пароль в качестве параметра, чтобы избежать этого поведения.
См. также password(), setUserName(), setDatabaseName(), setHostName(), setPort(), setConnectOptions(), и open().
void QSqlDatabase::setPort(int port)
Устанавливает номер порта подключения на port. Для действия номер порта должен быть установлен до подключения. В качестве альтернативы можно закрыть соединение, установить номер порта и снова вызвать open().
Значение по умолчанию отсутствует.
См. также port(), setUserName(), setPassword(), setHostName(), setDatabaseName(), setConnectOptions(), и open().
void QSqlDatabase::setUserName(const QString &name)
Устанавливает имя пользователя подключения на name. Для действия имя пользователя должно быть установлено до подключения. В качестве альтернативы можно закрыть соединение, установить имя пользователя и снова вызвать 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-5.15/qsqldatabase.html