Qt数据库在开发中的应用(二)

您所在的位置:网站首页 qt调用数据库数据 Qt数据库在开发中的应用(二)

Qt数据库在开发中的应用(二)

2023-06-01 13:47| 来源: 网络整理| 查看: 265

(一)Qt为SQL数据库提供支持的基本模块(Qt SQL)

        Qt SQL的API分为不同层

         驱动层        SQL API层        用户接口层

1、驱动层

        对于Qt 是基于C++来实现的框架,该层主要包括QSqlDriver,QSqlDriverCreator,QSqlDriverCreatorBase,QSqlPlugin,and QSqlResult.这一层提供了特定数据和SQLAPI层之间的底层桥梁。

2、SQL API层

​         对于SQL API层提供了数据库的访问相关类,其中,QSqlDatabase类进行连接,QSlqQuery可以完成于数据库的交互。除此之外,包括了还提供了QSqlError,QSqlField,QSqlIndex,and QSqlRecord类。

3、用户接口层

​         用户接口层的几个类实现了将数据库中的数据链连接到窗口部件上,这些类是使用模型/试图框架实现的,它们是更高层次的抽象,主要包括QSqlQueryModel,QSqlTableModel,andQSqlRelationalTableModel.

(二) SQLite数据库操作流程:

        第一步:在项目管理文件(.pro)中,增加数据库模块         第二步:查看Qt对数据库的驱动的类型的支持         第三步:连接数据库 打开数据库         第四步:访问数据库         第五步:关闭数据库

在《Qt数据库在开发中的应用(一)——查看qt支持哪些数据库的驱动》一文中实现了第一、二步。

(三)Qt SQL模块对数据库类

​ 在Qt中为SQL数据库提供驱动程序层、SQL API层和用户界面,其提供主要类的简要功能说明见下表:

类名称功能说明QSqlDatabase   用于与数据库建立连接QSqlDriver   访问特定sql数据库的抽象基类QSqlDriverCreator   为某个具体的数据库驱动提供SQL驱动的模板类QSqlDriverCreatorBase    所有SQL驱动器的基类QSqlDriverPlugin   用于定制QSqlDriver插件的抽象基类QSqlError    SQL数据错误信息,可以用于访问上一次出错的信息QSqlField    操作数据表或视图的字段的类QSqlIndex    操作数据库索引的类QSqlQuery    执行各种SQL语句的类QSqlQueryModel   SQL查询结果数据的制度数据模型,用于SQLECT查询结果数据记录的只读显示QSqlRecord    封装数据记录操作的类QSqlRelation   用于存储SQL外键信息的类,用于QSqlRelationalTabelModel数据源中设置代码字段于关联数据表的关系QSqlRelationalDelegate    用于QSqlRelationalTableModel的一个代码字段的显示和编辑代理组件一般是一个QCombBox组件,下拉列表中自动填充代码表的代码字段对应的实际内容QSqlRelationalTableModel  用于一个数据表的可编辑的数据模型,支持代码字段的外键QSqlResult访问SQL数据库的抽象接口QSqlTableModel 编辑一个单一数据表的数据模型类

Qt SQL也是采用MVC设计思想来处理数据,现对其主要类进行说明

​ (1)QSqlDatabase用于建立于数据库的连接,在建立连接时,加载数据库驱动,并且可以设置数据库类型和数据库名称,这样就可以正常的操作和访问数据库了。

除此之外,还可以通过接口设置数据库名称,主机名,用户名和密码。(注:对SQLite来讲,属于一种本地数据库类型,连接时不需要设置主机名,用户名和密码。但是连接的数据库是带服务器版本的数据库时,就需要设置了,常见的有MySql、Oracle)

其主要接口说明见下表:

函数名称    

功能说明QSqlDatabase addDatabase(const QString & type,const QString & connectionName=QLatin1String(defaultConnection))    根据数据库类型,获取数据库对象并连接void setDatabaseName(const QString &name)    设置连接数据库名字void setHostName(const QString &host)    设置连接主机名字void setPassword(const QString &Password)    设置连接密码void setUserName(const QString &name)    设置连接用户名bool open()    打开连接的数据库

我们会使用QSqlDatabase addDatabase(const QString & type,const QString & connectionName=QLatin1String(defaultConnection)) 这个函数完成对数据库的连接,成功的话会得到一个QSqlDatabase类的数据库对象。

第一个参数是指定数据库类型:数据库驱动名称,即在《Qt数据库在开发中的应用(一)——查看qt支持哪些数据库的驱动》一文中得到的数据库类型。第二个参数是指可以给我们连接好的数据库设置一个连接名称,一般使用默认参数。

另外我们会使用setDatabaseName(const QString &name)设置数据库名称,这个必须要设置。

(2)QSqlQuery执行各种SQL语句的类,但一定是在打开并成功连接的数据库后,才能通过QSqlQuery的接口来访问数据中内容。

在打开并成功连接的数据库之后,在实例化创建QSqlQuery对象时,就会自动去关联所对应的数据库,得到数据库QSqlQuery对象之后,就可以按照SQL语句访问数据库(通过exec(const QString & query),里面的参数是我们要执行的SQL语句,这个sql语句的语法后面补充,是专门用来访问数据库的语言)。

其主要接口说明见下表:

函数名称功能说明QSqlQuery(const QString & query = QString(),QSqlDatabase da = QSqlDatabase())得到访问数据库QSqlQuery对象bool exec(const QString & query)执行SQL语句访问数据库。参数是我们要执行的SQL语句int at() const得到当前记录查询位置,第一条记录的为0bool first()检索结果中的第一条记录bool last()检索结果中的最后一条记录bool next()检索结果中的下一条记录QVariant value(const QString &name) const返回当前记录中名为name的字段所对应的值

案例——QSqlDatabase 打开和连接数据库:

再次提醒:想要使用数据库,就必须在项目管理文件(.pro)中,增加数据库模块sql,这样才会将数据库相关的接口导入到项目中给我们使用。然后在头文件中添加需要用到的接口函数(本次我们使用的是,详情可查看用户手册)。

一个QSqlDatabase类的对象,就是一个数据库。

QMainWindow.h

#include #include QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; QSqlDatabase db; //对一个工程而言,该类对象就相当于一个数据库,所以,在一个工程中,通常只使用一个对象即可 };

QMainWindow.cpp

#include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); db=QSqlDatabase::addDatabase("QSQLITE"); //"QSQLITE"是QSqlDatabase::drivers()查出来什么样子就写什么(注意都是大写的) //"QSQLITE"表示连接的数据库是sqlite3数据库 //连接成功返回一个数据库对象(QSqlDatabase) db.setDatabaseName("test.db"); //通常使用.db结尾,表示是数据库文件的文件名 //以上就成功连接到数据库了。 //对于一个数据库程序而言,每次启动时,都需要连接数据库,所以通常情况下,以上的操作会放在构造函数中执行。 //如果想进一步操作数据库,就必须要进行数据库打开操作(可以把数据库当作一个文件去操作) if(!db.open()){ qDebug()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3