QSqlDatabase的学习

QSqlDatabase提供了一个连接数据库的接口,一个QSqlDatabase象征一个连接,为了获取数据库数据,这个连接需要支持数据库的驱动,这些驱动在QSqlDriver里面,当然你可以根据QSqlDriver派生自己的类,在帮助文档里面,你可以学到如何写自己的数据库驱动

Static Public Members:

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)

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)

 Protected Functions:

QSqlDatabase(const QString &type)

QSqlDatabase(QSqlDriver *driver)

可以通过静态成员函数QSqlDatabase::addDatabase()去创建连接,需要在参数里面指明驱动的类型,每个连接都有自己的名称,如果采用默认连接(defaultConnection)则表示采用匿名连接

当创建一个连接之后,首先你需要调用setDatabaseName(),setUserName(),setPassword(),setHostName(),setPort()和setconnectOptions()去设置你的连接,然后需要调用oepn()去激活物理连接,这个时候才算真正的连接上。

cloneDatabase()相当于从一个现有的connection去构造另外一个相同的连接,但是是相互独立的,注意感受下这里用到的线程池的知识,有点意思,值得注意的是,QSqlDatabase的copy构造函数被声明为了protected类型,这将让private继承类无法使用复制构造函数

根据连接的名字,可以用database()去获取这个连接,同样我们要考虑这个连接是复制还是引用,我认为是引用,但是函数的写法上有点与引用有出入,记下这一点,实际用的时候再看看情况

removeDatabase()是通过一个connectionName去remove一个连接

contains()可以根据一个connectionName去查看这个连接是否存在在连接list上

一旦连接上,你可以通过调用tables()去得到数据库的各个表,通过primaryIndex()去得到标的主键索引,通过调用record()去得到元组信息

Qt5.7解释了QSqlDatabase::exec()已经弃用,而是采用QSqlQuery::exec()替代

可以通过hasFeature()查看数据库是否支持事务机制,需要解释一下事务机制,事务就是一系列操作的集合,事务机制指的就是要么这些操作都执行,要么都不执行,这与原子操作有相似之处,但是还是有区别,注意体会

通过transaction()去开始一个事务,这需要在create query之前,而commit()(我理解为去查询是不是可以执行,即该数据库是不是正在被操作)和rollback(终止)就是去完成它

Note: For some databases, the commit will fail and return false if there is an active query using the database for a SELECT. Make the query inactive before doing the commit. (这句话是qt的帮助文件里面的)

lastError()会返回错误的相关信息

使用drivers()会返回可用的数据库驱动,如果自己创建了一个驱动,必须采用registerSqlDriver()去完成注册,然后才能使用

 

 

public functions:

 

QSqlDatabase()

 

QSqlDatabase(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 &

operator=(const QSqlDatabase &other)

你可能感兴趣的:(qt,QSql)