Qt Class学习_QSqlDatabase

  • The QSqlDatabase class 对连接的数据库进行操作
Header: #include <QSqlDatabase>
qmaker: Qt += sql
  • 关于函数的详细的描述
    QSqlDatabase 类对连接的数据库进行操作
    QSqlDatabase类提供了通过连接来访问数据库的接口,一个QSqlDatabase的名称为代表一个连接。这个连接提供了一种支持的数据库驱动的数据库的访问接口,这个数据库驱动可以从QSqlDriver类中去导出,或者你可以基于QSqlDriver类中创建自己的子类,这一点请看:
    通过使用static addDatabase()功能来创造一个连接,你可以指定一个驱动或者驱动的类型来使用(取决于数据库的类型)和一个连接的名字,一个连接是通过其名字来判断的,而不是通过连接的数据库的名称,你可以对一个数据库有很多的连接,QSqlDatabase也支持默认连接(没有命名的连接)的概念,为了创建默认的连接,当使用addDatabase()函数的时候不要略过连接的名称原则,如果你使用任何静态成员函数而不指定连接的名字,默认的连接将会指定,下面的代码段展示了如何创造和打开一个到PostfreSQL 数据库的默认连接:
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是一个带值的类,每一个对数据的改变都会影响连接到此数据库的其他值,使用cloneDatabase()来基于一个存在的数据库创建独立的连接。

  • 警告:特别建议的是不要保留一个QSqlDatabase()的副本来做为类的一部分,这样会阻值这个示例在关闭的时候不能被销毁,如果你想访问一个存在的数据库,应该使用database()来访问,如果你想有一个QSqlDatabase的成员变量,这需要你在QCoreApplication销毁前销毁它,要不然会有意想不到的后果。
    如果你想创造多个数据库连接,请指定每一个连接的名称都唯一,当你使用addDatabase()的时候,使用database()和连接的名称来得到这个连接,使用removeDatadbase()和连接的名称来移除这个连接,QSqlDatabase输出一个异常,如果你尝试通过其他的QSqlDatabase对象来移除一个连接,使用contains()来看是否一个给定的连接的名称在连接的列表中。
一些实用的方法
tables()返回tables的列表
primaryindex()返回表的主要的列
record()返回表的域的变化信息
transaction()开始一个事务
commit()保存并完成一个事务
rollback()取消一个事务
hasFeature()检查是否驱动支持这个事务
lastError()返回最后一个错误的信息
drivers()返回可用的SQL驱动
isDriverAvailable()检查这个驱动是否可用
registerAqlDriver()登记一个客户驱动
  • 注意:QSqlDatabase::exec()是不可以用的,使用QSqlQuery::exec()来代替
  • 注意:当使用事务时,你必须在创建查询前开始这个事务

其他部分可以看:QSqlDriver, QSqlQuery, 和 Threads and SQL Module.

  • 成员功能文档
  • QSqlDatabase::QSqlDatabase()
    创建一个空的,无效的QSqlDatabase对象,使用addDatabase(), removeDatabase(), 和database()来得到有效的QSqlDatabase对象
  • QSqlDatabase::QSqlDatabase(const QSqlDatabase &other)
    创建一个其他的副本
  • QSqlDatabase::QSqlDatabase(const QString &type) [私有的]
    这是一个重载函数
    创建一个QSqlDatabase的连接,使用指定的驱动类型,如果这个类型不能被识别,这个数据库的连接是无效的。
    现在可以使用的驱动类型如下:
驱动类型描述
QDB2IBM DB2
QIBASEBorland InterBase Driver
QMYSQLMySQL 驱动
QOCIOracle 调用接口驱动
QODBCODBC 驱动(包括微软的SQL服务)
QPSQLPostgreSQL 驱动
QSQLITESQL 3或者更高
QSQLITE2SQLite 2
QTDSSybase Adaptive server

如果需要第三方驱动的支持,包括自己的第三方驱动,可以被动态的加载
其他的部分可以看:SQL Database Drivers, registerSqlDriver(), and drivers().

  • QSqlDatabase::QSqlDatabase(QSqlDriver *driver()) [私有的]
    这是一个重载函数
    使用给定的驱动创造一个数据库

  • QSqldatabase::~QSqlDatabase()
    销毁这个对象,销毁所有的存在连接的源
    注意:当最后一个连接被销毁的时候,析构函数会隐式调用close()函数如释放数据库连接
    其他的部分请看close()

  • QSqlDatabase QSqlDatabase::addDatabase(const QString &type, const QString &connectionName = QLatin 1 String(defaultConnection)) [静态]
    使用驱动类型添加一个数据库到数据库的连接列表中,而且连接的名字为连接名,如果已经存在一个名为连接的名字的数据库连接,这个连接会被移除。
    数据库通过连接名被引用,新添加的数据库的连接被返回。
    如果这个类型不存在或者不能被加载,isVaild()函数将返回false.
    如果连接名没有被规定,新的连接将会变成对应用的默认连接,后面的对于database()的不带连接名的声明的内容将会返回默认的连接,如果一个连接名在这里是私有的,使用database(连接名)来返回这个连接。
    警告:如果你添加了一个现在存在的连接相同名字的连接,新的连接将会取代旧的,如果你多次没有指定连接的名的调用这个函数,默认的连接将会被替代。
    注意:这个功能是线程安全的
    其他的部分请看database(), removeDatabase(), 和Threads and the SQL Module

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值