Qt数据库在开发中的应用(二) |
您所在的位置:网站首页 › qt调用数据库数据 › Qt数据库在开发中的应用(二) |
(一)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 |