Описание класса QSqlDatabase
|
| Тип драйвера | Описание |
|---|---|
| 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 Database Drivers, registerSqlDriver() и drivers().
Создает соединение с базой данных ипользуя переданный driver.
Удаляет объект и очищает любые выделенные ресурсы.
Если QSqlDatabase является последним, то соединение с базой данных автоматически закрывается.
Смотрите также close().
Добавляет базу данных в список соединений баз данных используя драйвер type и имя соединения connectionName. Если уже существует соединение с базой данных, называющееся connectionName, оно удаляется.
Соединения с базой данных в дальнейшем именуется connectionName. Будет возвращено вновь добавленое соединение.
Если connectionName не определено, вновь добавленное соединение становится для приложения соединением по умолчанию, и последующие вызовы database() без параметра вернут ссылку на него. Если connectionName задано, используйте его при вызове той функции database(connectionName), чтобы вернуть указатель на соединение.
Внимание: если вы добавите базу данных с тем же именем, как и у существующей, старая БД будет заменена новой. Это происходит автоматически, если вы вызываете данную функцию больше, чем один раз, без указания connectionName.
Чтобы использовать соединение, вам нужно настроить его, например, вызвав некоторые или все из фунций setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort() и setConnectOptions(), а затем вам нужно открыть соединение с помощью open().
Примечание: эта функция потокобезопасна.
Смотрите также database(), removeDatabase() и Потоки и SQL модуль.
Эта перегруженная функция, предоставленная для удобства.
Эта функция полезна, если вам необходимо установить соединение и создать экземпляр самого драйвера. Если вы делаете это, то рекомендуем вам включить код драйвера в ваше собственное приложение. Например, настройка собственного соединения PostgreSQL и экземпляра драйвера QPSQL может быть сделана следующим образом:
#include "qtdir/src/sql/drivers/psql/qsql_psql.cpp"
(Мы допускаем, что qtdir является папкой установки Qt.) Это будет подключать код, который нужно использовать клиентской библиотеке PostgreSQL и создавать экземпляр объекта QPSQLDriver, если предположить, что у вас есть заголочные файлы PostgreSQL где-нибудь по вашему пути поиска.
PGconn *con = PQconnectdb("host=server user=bart password=simpson dbname=springfield");
QPSQLDriver *drv = new QPSQLDriver(con);
QSqlDatabase db = QSqlDatabase::addDatabase(drv); //становится новым соединением по умолчанию
QSqlQuery query;
query.exec("SELECT NAME, ID FROM STAFF");
...
Вышеуказанный код устанавливает PostgreSQL соединение и создает экземпляр объекта QPSQLDriver. Затем вызывается addDatabase(), чтобы добавить соединение в известные соединения так, что оно может быть использовано классами Qt SQL. Когда создан экземпляр драйвера с обработчиком соединения (или набором обработчиков), Qt предполагает, что вы уже открыли соединение с базой данных.
Помните, что вы должны связать свое приложение с клиентской библиотекой базы данных. Простейший способ сделать это состоит в том, чтобы добавить строки, подобно указаным ниже в ваш .pro файл:
unix:LIBS += -lpq win32:LIBS += libpqdll.lib
Вы должны будете иметь клиентскую библиотеку в пути поиска своего компоновщика.
Метод, описанный выше, будет работать для всех драйверов, единственное различие - аргументы, принимаемые конструктором драйвера. Ниже приводится обзор драйверов и аргументы их конструктора.
| Драйвер | Имя класса | Аргументы конструктора | Файлы для подключения |
|---|---|---|---|
| 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 инструментария (framework) становится владельцем указателя на driver, и он не должен удалятся. Если вы хотите явно удалить подключение, используйте removeDatabase().
Смотрите также drivers().
Клонирует соединение с БД other и сохраняет копию с именем connectionName. Все настройки исходной БД, такие как databaseName(), hostName() и т.д., дублируются. Если other является некорректным, то ничего не происходит. Будет возвращено вновь добавленое соединение.
Помните, что соединение будет неоткрытым, чтобы это исправить, используйте open().
Закрывает соединения с БД, освобождает занятые ресурсы и отменяет все текущие запросы QSqlQuery.
Это сработает для всех копий объекта QSqlDatabase.
Смотрите также removeDatabase().
Выполняет транзакцию БД, если они поддерживаются и уже была начата транзакция посредсвом transaction(). Возвращает true, если операция прошла успешно; в противном случае возвращает false.
Помните, что для некоторых баз данных эта функция не будет работать, если нет активной QSqlQuery. Используйте lastError() для получения спецфичной для БД информации о произошедших ошибках.
Смотрите также QSqlDriver::hasFeature() и rollback().
Возвращает строку используемых опций соединения. Эта строка может быть пустой.
Смотрите также setConnectOptions().
Возвращает список, содержащий имена всех соединений.
Примечание: эта функция потокобезопасна.
Смотрите также contains(), database() и Потоки и SQL модуль.
Возвращает true, если список соедниней содержит одно с именем connectionName; в противном случае возвращает false.
Примечание: эта функция потокобезопасна.
Смотирте также connectionNames(), database() и Threads and the SQL Module.
Возвращает соединение с БД с именем connectionName. Оно должно быть заранее добавлено с помощью addDatabase(). Если open равно true (по умолчанию это так) и такое соединение ещё не открыто, оно открывается. Если connectionName не задано, используется соединение по умолчанию. Если connectionName отсутсвует в списке БД, возвращается неверное соединение.
Примечание: эта функция потокобезопасна.
Смотирте также isOpen() и Потоки и SQL модуль.
Возвращает имя соединения с БД; может быть пустым.
Смотрите также setDatabaseName().
Возвращает драйвер БД, используемый для соединения с базой данных.
Смотрите также addDatabase() и drivers().
Возвращает имя драйвера соединения.
Смотрите также addDatabase() и driver().
Возвращает список доступных драйверов БД.
Смотрите также registerSqlDriver().
Применяет SQL запрос к БД и возвращает объект QSqlQuery. Используйте lastError() для получения информации об ошибках. Если query является пустым, соответственно, пустой, неправильный запрос будет возвращён и lastError() не будет задействован.
Смотрите также QSqlQuery и lastError().
Возвращает имя узла соединения. Параметр может быть пустым.
Смотрите также setHostName().
Возвращает true, если драйвер с именем name доступен; в противном случае возвращает false.
Смотрите также drivers().
Возвращает true, если соединение в БД открыто; в противном случае возвращает false.
Возвращает true, если произошла ошибка соединения с БД; в противном случае возвращает false. Информацию об ошибке можно получить с помощью функции lastError().
Возвращает true, если QSqlDatabase является корректным драйвером.
Пример:
QSqlDatabase db; qDebug() << db.isValid(); // Возвращает false db = QSqlDatabase::database("sales"); qDebug() << db.isValid(); // Возвращает true, если создано соединение "sales" QSqlDatabase::removeDatabase("sales"); qDebug() << db.isValid(); // Возвращает false
Возвращает информацию о последней случившейся при работе с БД ошибке.
При помощи QSqlQuery::lastError() можно узнать о неудавшихся попытках связывания и отдельных запросов.
Смотирте также QSqlError и QSqlQuery::lastError().
Открывает соединение с БД, используя текущие значения параметров соединения. Возвращает true, если всё прошло успешно; в противном случае возвращает false. Информацию об ошибке можно получить с помощью функции lastError().
Смотрите также lastError(), setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort() и setConnectOptions().
Эта перегруженная функция, предоставленная для удобства.
Открывает соединения с БД, использую переданные имя пользователя user и пароль password. Возвращает true, если всё прошло успешно; в противном случае возвращает false. Информацию об ошибке можно получить с помощью функции lastError().
Данная функция не сохраняет пароль, если он был передан. Вместо этого он передаётся непосредственно драйверу для открытия соединения, после чего сбрасывается.
Смотирте также lastError().
Возвращает пароль соединения. Если он не был установлен с помощью setPassword() и был передан посредством вызова open() или же он не используется, возвращается пустая строка.
Смотрите также setPassword().
Возвращает номер порта соединения. Если номер порта не был установлен, это значение не будет определено.
Смотрите также setPort().
Возвращает главный индекс таблицы tablename. Если такой не определён, возвращается пустой QSqlIndex.
Смотрите также tables() и record().
Возвращает QSqlRecord, наполненный именями полей таблицы (или представления) tablename. Порядок, в котором поля будут представлены, не определён. Если указанной таблицы (или представления) не существует, созаращается пустая запись (record).
Эта функция регистрирует новый SQL драйвер под именем name внутри SQL инструментария (framework). Это используется для пользовательских SQL драйверов, которые не компилируются как плагин (plugin).
Пример:
QSqlDatabase::registerSqlDriver("MYDRIVER",
new QSqlDriverCreator<MyDatabaseDriver>);
QSqlDatabase db = QSqlDatabase::addDatabase("MYDRIVER");
QSqlDatabase берёт на себя управление указателем на creator, потому вы не должны беспокоиться о его удалении.
Смотрите также drivers().
Убирает соединение connectionName из списка соеднинений с БД.
Внимание: во время вызова этой функции не должно быть открытых запросов к данной БД, в противном случае произойдёт утечка ресурса (resource leak).
Пример:
// НЕПРАВИЛЬНО QSqlDatabase db = QSqlDatabase::database("sales"); QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db); QSqlDatabase::removeDatabase("sales"); // породит предупреждение // "db" в данный момент висит на неправильном соединении с БД, // "query" содержит неправильный результат
Вот правильный вариант реализации:
{
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
}
// Оба, "db" и "query", уничтожаются при выходе из их блока
QSqlDatabase::removeDatabase("sales"); // правильно
Примечание: эта функция потокобезопасна.
Смотрите также database() и Потоки и SQL модуль.
Откатывает транзакцию БД, если драйвер поддерживает их и транзакция transaction() была начата. Возвращает true, если операция прошла успешно; в противном случае возвращает false.
Смотрите также QSqlDriver::hasFeature() и commit().
Устанавливает специфичные для разных БД настройки options. Это должно быть сделано до того, как произойдёт соединение с БД, иначе оно не будет работать (или вы можете закрыть соединение с помощью close(), вызвать эту функцию, а затем open() для повтора соединения).
Формат строки options является списком имён или пар параметр=значение (option=value), разделённых точкой с запятой. В зависимости от БД используются следующие опции:
| ODBC | MySQL | PostgreSQL |
|---|---|---|
|
|
|
| DB2 | OCI | TDS |
|
| none |
| SQLite | Interbase | |
|
|
Примеры:
... // соденинение MySQL db.setConnectOptions("CLIENT_SSL=1;CLIENT_IGNORE_SPACE=1"); // используйте SSL соединение if (!db.open()) { db.setConnectOptions(); // очищает список параметров ... } ... // PostgreSQL connection db.setConnectOptions("requiressl=1"); // включает PostgreSQL SSL соединения if (!db.open()) { db.setConnectOptions(); // очищаем список параметров ... } ... // ODBC соединение db.setConnectOptions("SQL_ATTR_ACCESS_MODE=SQL_MODE_READ_ONLY;SQL_ATTR_TRACE=SQL_OPT_TRACE_ON"); // устанавливаем ODBC опции if (!db.open()) { db.setConnectOptions(); // не пытайтесь задать этот параметр ... }
Сверьтесь с документацией по библиотеки клиента для получения большей информации о различных опциях.
Смотрите также connectOptions().
Устанавливает name в качестве имени соединения. Это должно быть сделано до того, как произойдёт соединение с БД, иначе оно не будет работать (или вы можете закрыть соединение с помощью close(), вызвать эту функцию, а затем open() для повтора соединения). Имя зависит от БД.
Для драйвера QOCI (Oracle) оно является TNS Service Name.
Для драйвера QODBC, name может быть DSN, имя файла DSN (в котором имя файла должно иметь расширение .dsn) или строкой соединения.
Например, пользователи Microsoft Access могут использовать вместо создания DSN записи в менеджере ODBC следующую строку соединения для открытия непосредственно файлов .mdb:
...
db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");
if (db.open()) {
// success!
}
...
У этого параметра нет значения по умолчанию.
Смотрите также databaseName(), setUserName(), setPassword(), setHostName(), setPort(), setConnectOptions() и open().
Устанавливает host как имя узла. Это должно быть сделано до того, как произойдёт соединение с БД, иначе оно не будет работать (или вы можете закрыть соединение с помощью close(), вызвать эту функцию, а затем open() для повтора соединения).
У этого параметра нет значения по умолчанию.
Смотрите также hostName(), setUserName(), setPassword(), setDatabaseName(), setPort(), setConnectOptions() и open().
Устанавливает password как пароль соединения. Это должно быть сделано до того, как произойдёт соединение с БД, иначе оно не будет работать (или вы можете закрыть соединение с помощью close(), вызвать эту функцию, а затем open() для повтора соединения).
У этого параметра нет значения по умолчанию.
Внимание: эта функция хранит пароль в виде открытого текста внутри Qt. Используйте open() для получения пароля в виде параметра, не зависящего от его поведения.
Смотрите также password(), setUserName(), setDatabaseName(), setHostName(), setPort(), setConnectOptions() и open().
Устанавливает порт соединения как port. Это должно быть сделано до того, как произойдёт соединение с БД, иначе оно не будет работать (или вы можете закрыть соединение с помощью close(), вызвать эту функцию, а затем open() для повтора соединения).
У этого параметра нет значения по умолчанию.
setDatabaseName() setConnectOptions() open()
Смотрите также port(), setUserName(), setPassword() и setHostName().
Устанавливает name как имя пользователя для соединения с БД. Это должно быть сделано до того, как произойдёт соединение с БД, иначе оно не будет работать (или вы можете закрыть соединение с помощью close(), вызвать эту функцию, а затем open() для повтора соединения).
У этого параметра нет значения по умолчанию.
setPort() setConnectOptions() open()
Смотрите также userName(), setDatabaseName(), setPassword() и setHostName().
Возвращает список таблиц БД, системных таблиц и представлений, в зависимости от параметра type.
Смотрите также primaryIndex() и record().
Начинает транзакцию при работе с БД, если осуществляется их поддержка. Возвращает true, если операция прошла успешно; в противном случае возвращает false.
Смотрите также QSqlDriver::hasFeature(), commit() и rollback().
Возвращает имя пользователя для соединения, может вернуть пустую строку.
Смотрите также setUserName().
Прикрепляет other к данному объекту.
| Copyright © 2007 Trolltech | Trademarks | Qt 4.3.2 |
|
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |