7 数据库
约 1526 字大约 5 分钟
2025-06-22
常用的数据库类:
- QSqlDatabase :通过这个类添加/删除/复制/关闭数据库实例
- QSqlQuery :数据库查询类
- QSqlRecord :数据库记录(通常是数据库中表或视图中的一行)的功能和特征。
- QSqlField :数据库表或视图中单个列的特征,例如数据类型和列名。
- QSqlQueryModel :执行SQL语句和遍历结果集的高级接口。它构建在底层QSqlQuery之上,可以用来为视图类(如QTableView)提供数据。
- QSqlError :数据操作失败可以通过这个类获取相关的错误信息。
在Qt中不论我们连接的何种类型的关系型数据库,在我们使用的时候其操作流程是一致的:
- 创建数据库实例并初始化
- 连接数据库
- 对数据库进行一系列的添、删、查、改操作(编写并执行SQL语句)
- 关闭数据库
QSqlDatabase
静态公共成员
//添加数据库示例并不是使用构造函数,而是使用addDatabase静态成员添加
//type:连接数据库的驱动
//connectionName:数据库实例的名字,如果只连接一个数据库使用默认名即可,如果有多个数据库就通过这个名字区分开来
QSqlDatabase addDatabase(const QString &type,const QString &connectionName = QLatin1String(defaultConnection))
QSqlDatabase addDatabase(QSqlDriver *driver,const QString &connectionName=QLatin1String(defaultConnection))
//复制数据库实例
//other就是指定的数据库实例,connectionName需要给这个克隆的实例指定一个名字
QSqlDatabase cloneDatabase(const QSqlDatabase &other,const QString &connectionName)
//根据数据库实例的名字克隆,第一个参数是已有的数据库实例的名字,第二个是克隆出来的数据库实例的名字
QSqlDatabase cloneDatabase(const QString &other,const QString &cornectionName)
//获取所有的数据库实例的连接名
QStringList connectionNames()
//判断数据库实例是否存在,参数是实例连接名
bool contains(const QString &connectionName=QLatin1String(defaultConnection))
//根据连接名得到数据库实例连接对象,第一个参数是要得到的连接名,第二个参数是得到这个实例后是打开的还是关闭的,如果是true就是打开的,如果是false就是关闭的,关闭了就连接不上了
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)
公共成员函数
//设置要连接的数据库的名字
void setDatabaseName(const QString &name)
//设置要连接的主机名,localhost是本地的域名,对应的ip是127.0.0.1,如果是远程服务器指定的是远程服务器的ip地址
//如果是在本主机上连接有三种写法,一种是localhost,一种是127.0.0.1,一种是主机的ip地址
void setHostName(const QString &host)
//指定用户名
void setUserName(const QString &name)
//指定密码。如果是mysql数据库要访问数据库需要的是数据库名和该数据库名对应的密码,如果是orcal数据库需要的是用户名加上该用户的密码
void setPassword(const QString &password)
//设置端口号,是数据库服务器在启动时绑定的端口,如果时mysql默认绑定的端口是3306,如果是orcal绑定的默认端口是1521
void setPort(int port)
//在设置好属性后就可以调用open方法进行连接了,连接成功返回true,连接失败返回false
bool open()
//判断qdatabase对象是否连接到数据库上,如果连接上返回true,没连接返回false
bool isOpen()
//数据库操作时最后的错误信息,但并不是一个文本信息,可以使用内置的text函数转化为文本信息
QSqlError lastError()const
//关闭连接
void QSqlDatabase::close()
事务操作
//创建事务
bool QSqlDatabase::transaction()
//提交事务
bool QSqlDatabase::commit();
//事务回滚
vool QSqlDatabase::rollback();
QSqlQuery
QSqlQuery
封装了从QSqlDatabase
上执行的SQL查询中创建、导航和检索数据所涉及的功能。既可以执行SELECT
、INSERT
、UPDATE
、DELETE
等DML(数据操作语言)语句,也可以执行CREATE TABLE
等DDL(数据定义语言)语句。
常用成员函数
构造函数
//query:要执行的sql语句,如果没有指定可以使用exec函数传入进来。db:数据库实例对象,如果没有指定db,或者是无效的,则使用应用程序的默认数据库。
QSqlQuery(const QString &query = QString(),QSqlDatabase db= QSqlDatabase())
QSqlQuery(const QSqlQuery&other)
QSqlQuery(QSqIDatabase db)
QSqlQuery(QSqlResult *result)
其他函数
//执行seql语句,如果在实例化对象时指定了sql语句就可以调用第一个重载函数执行,如果实例化时没有指定sql语句就需要调用第二个重载函数指定sql语句
//如果sql语句执行成功返回true,执行失败返回false
bool exec()
bool exec(const QStrting &query)
如果执行的是查询语句,在这个类里面就会把结果集保存起来,要获取其中的数据就需要遍历结果集,得到的结果集是一个多行多列的表结构,可以使用next方法获取,使用next方法遍历每次获取其中的一条记录
//如果指针的下一条数据存在就返回true,不存在就返回false(结果集遍历完或没有查询到相关信息,这样第一次调用就返回的是false)
bool next()
//返回结果集里的第一条记录
bool first()
//返回结果集里的最后一条记录
bool last()
//要取出结果集里的字段数据可以使用value方法
//通过value方法就可以取出字段对应的数据的值了
//索引从0开始,按照字段排
QVariant value(int index)const
//按照字段名获取
QVariant value(const QString &name)const
贡献者
版权所有
版权归属:PinkDopeyBug