QSqlDatabase 代表一个数据库连接,该类提供了访问数据库的接口,而该类的实例代表着一个数据库的连接
而这个连接通过支持的数据库驱动程序进行访问,或者, 你可以从QSqlDriver子类化数据库驱动程序。
我们可以通过QSqlDatabase的讲台成员函数addDatabase()来创建一个连接,调用这个函数时,我们可以传递我们要
访问哪种类型的数据库。
下面是一个例子,连接到PostgreSQL 数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("acidalia");
db.setDatabaseName("customdb");
db.setUserName("mojito");
db.setPassword("J0a1m8");
bool ok = db.open();
我们可以通过静态函数database() 来返回一个数据库连接
我们可以通过静态函数removeDatabse()来移除一个连接
我们可以通过contains函数,来返回一个连接名称的列表
一旦连接被建立,我们可以通过调用tables() 来返回一个表的列表,调用primaryIndex()来得到表单的主要索引,并且调用 record
去得到table’s 的字段
如果这个驱动支持事务控制,使用 transaction() 函数去开始事务控制,可以调用commit()提交操作和rollback()
回滚操作去完成它,调用hasFeature() 函数去查看该驱动是否支持事务控制。
注意,当使用事务控制的时候,我们必须在查询之前调用transaction
如果出现了错误则调用lastError()
我们可以通过调用drives()来获得支持的数据库名称 ,我们可以通过调用idDriverAvaliable()
函数来确定这个驱动程序是否存在
如果你想创造你自己的驱动程序,你需要通过调用registerSqlDriver()
创建一个空的无效的数据库对象
QSqlDatabase::QSqlDatabase(const QSqlDatabase &other)
创建一个拷贝对象
Driver Type | Description |
QDB2 | IBM DB2 |
QIBASE | Borland InterBase Driver |
QMYSQL | MySQL Driver |
QOCI | Oracle Call Interface Driver |
QODBC | ODBC Driver (includes Microsoft SQL Server) |
QPSQL | PostgreSQL Driver |
QSQLITE | SQLite version 3 or above |
QSQLITE2 | SQLite version 2 |
QTDS | Sybase Adaptive Server |
|
|
[protected] QSqlDatabase::QSqlDatabase(QSqlDriver *driver)
使用得到的驱动, 创建一个数据库连接
销毁对象,并释放资源
[static] QSqlDatabase QSqlDatabase::addDatabase(const QString &type, const QString &connectionName = QLatin1String( defaultConnection ))
添加一个连接
需要注意的是,如果我们增加了一个已经存在的connectName连接,则存在的connectName将会被替代
[static] QSqlDatabase QSqlDatabase::addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1String( defaultConnection ))
根据驱动Kauai添加一个连接
Eg:
#include "qtdir/src/sql/drivers/psql/qsql_psql.cpp"
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");
[static] QSqlDatabase QSqlDatabase::cloneDatabase(const QSqlDatabase &other, const QString &connectionName)
拷贝一个数据库连接
执行提交操作。
QString QSqlDatabase::connectOptions() const
返回连接选项
QString QSqlDatabase::connectionName() const
返回连接名字
[static] bool QSqlDatabase::contains(const QString &connectionName = QLatin1String( defaultConnection ))
返回连接名
[static] QSqlDatabase QSqlDatabase::database(const QString &connectionName = QLatin1String( defaultConnection ), bool open = true)
根据连接名返回一个QSqlDatabase实例
QString QSqlDatabase::databaseName() const
返回数据库的名称
QString QSqlDatabase::driverName() const
返回驱动名称
[static] QStringList QSqlDatabase::drivers()
返回支持的驱动名称。
QSqlQuery QSqlDatabase::exec(const QString &query = QString()) const
执行sql查询
QString QSqlDatabase::hostName() const
返回域名
[static] bool QSqlDatabase::isDriverAvailable(const QString &name)
检测驱动
bool QSqlDatabase::isOpen() const
检测是否连接
bool QSqlDatabase::isOpenError() const
检测连接是否存在
bool QSqlDatabase::isValid() const
检测QSqlDatabase是否存在
建立连接
bool QSqlDatabase::open(const QString &user, const QString &password)
建立连接
[static] void QSqlDatabase::removeDatabase(const QString &connectionName)
回滚
void QSqlDatabase::setDatabaseName(const QString &name)
设置数据库名称
QStringList QSqlDatabase::tables(QSql::TableType type = QSql::Tables) const
返回数据库中的表的列表