Класс 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. Подробнее см. Как написать собственный драйвер базы данных.
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 или выше |
Дополнительно могут загружаться драйверы сторонних разработчиков, включая ваши собственные пользовательские драйверы.
См. также 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 |
| 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, если существует активный запрос QSqlQuery, использующий базу данных для 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())
Устанавливает опции, специфичные для базы данных. Это необходимо сделать до открытия соединения, иначе это не повлияет. Ещё один вариант — закрыть соединение, вызвать QSqlDatabase::setConnectOptions() и снова открыть соединение с помощью open().
Формат строки options — это список опций, разделённых точкой с запятой, или пары имя=значение. Опции зависят от используемого клиента базы данных:
| ODBC | MySQL | PostgreSQL |
|---|---|---|
|
|
|
| DB2 | OCI | |
|
|
|
| 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)
Устанавливает имя базы данных подключения в имя. Для действия имя базы данных должно быть установлено до открытия подключения. В качестве альтернативы можно закрыть () подключение, установить имя базы данных и снова вызвать open().
Примечание: Имя базы данных не является именем подключения. Имя подключения необходимо передать в addDatabase() при создании объекта подключения.
Для драйвера QSQLITE, если указанное имя базы данных не существует, то он создаст для вас файл, если не установлен параметр QSQLITE_OPEN_READONLY.
Кроме того, имя можно установить в ":memory:", что создаст временную базу данных, доступную только в течение срока действия приложения.
Для драйвера QOCI (Oracle) имя базы данных — это имя службы TNS.
Для драйвера QODBC имя может быть 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 не влияет на активные запросы.
См. также 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-6.0/qsqldatabase.html