欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > QT操作数据库

QT操作数据库

2024/10/24 23:30:30 来源:https://blog.csdn.net/weixin_50357983/article/details/142180777  浏览:    关键词:QT操作数据库

思维导图:


学习内容:

1. QSqlDatabase:数据库管理类

        主要完成数据库的创建、数据库的打开、关闭等操作

        该类中常用函数:

1、 QSqlDatabase addDatabase(const QString &type, const QString &connectionName = QLatin1String(defaultConnection))

功能:为应用程序添加一个数据库,如果数据库不存在则添加,如果数据库存在,则直接构造

参数:数据库驱动类型

2、 bool contains(const QString &connectionName = QLatin1String(defaultConnection))

功能:判断某个数据库是否存在

参数:数据库的名称 返回值:存在返回真,否则返回假

3、bool QSqlDatabase::open()

功能:打开一个数据库,如果数据库存在则打开,否则创建一个数据库

参数:无 返回值:bool类型,成功打开返回true失败返回false

4、void QSqlDatabase::setDatabaseName(const QString &name)

功能:设置数据库的名称

参数:数据库名称 返回值:无

2. QSqlQuerry:查询类

        能完成对select语句的执行

        该类常用的函数

1、bool QSqlQuery::exec(const QString &query)

功能:执行sql语句,并将结果放入到该类的对象中以便于后期的使用

参数:要执行的sql语句

返回值:成功执行返回true,失败返回false

2、bool QSqlQuery::next() bool QSqlQuery::previous()

功能:返回下一条或上一条记录

参数:无

返回值:bool类型

3、QSqlRecord QSqlQuery::record() const

功能:返回当前查询的记录值

参数:无

返回值:QSqlRecord类对象

3. QSqlRecord类

        1> 该类用于存储某一条记录的信息

        2> 常用函数

1、int QSqlRecord::count() const

功能:返回当前记录的字段的个数

参数:无

返回值:字段的个数

2、QVariant QSqlRecord::value(int index) const

功能:返回给定下标的字段的值

参数:字段的下标

返回值:给定下标的字段值

头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QSqlDatabase>        //数据库管理类
#include<QSqlQuery>            //数据库查询类
#include<QSqlError>            //数据库错误信息类
#include<QSqlRecord>          //数据库记录类QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_addBtn_clicked();void on_showBtn_clicked();private:Ui::Widget *ui;QSqlDatabase db;           //使用无参构造,实例化一个数据库管理类对象};
#endif // WIDGET_H

源文件 

#include "widget.h"
#include "ui_widget.h"
#include<QMessageBox>
#include<QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//当界面被关闭时,断开数据库的连接connect(this, &Widget::destroyed, [&](){db.close();});//1、添加数据库db = QSqlDatabase::addDatabase("QSQLITE");      //添加的是sqlite3的数据库驱动//2、设置数据库的名称db.setDatabaseName("my.db");//4、打开数据库if(!db.open()){QMessageBox::information(this,"提示","数据库打开失败");return;}//完成对数据表的创建,需要一个sql语句的执行者QSqlQuery querry;           //实例化对象//准备sql语句QString sql = "create table if not exists Stu(id int, name char, score double);";//执行sql语句if(!querry.exec(sql)){QMessageBox::information(this,"提示","数据表创建失败");return;}}Widget::~Widget()
{delete ui;
}//添加信息对应的槽函数
void Widget::on_addBtn_clicked()
{//1、获取ui界面上的信息int ui_id = ui->idEdit->text().toInt();    //id号QString ui_name = ui->nameEdit->text();    //namedouble ui_score = ui->scoreEdit->text().toDouble();   //score//判断是否某个数据没有填写if(ui_id==0 || ui_name.isEmpty() || ui_score==0){QMessageBox::information(this,"提示","请将信息填写完整");return;}//2、准备sql语句QString sql =tr("insert into Stu(id, name, score) values(%1, '%2', %3);").arg(ui_id).arg(ui_name).arg(ui_score);//qDebug()<<sql;//3、准备语句执行者QSqlQuery querry;if(!querry.exec(sql)){QMessageBox::information(this,"提示","数据添加失败");return;}QMessageBox::information(this,"提示","数据添加成功");}//展示信息按钮对应的槽函数
void Widget::on_showBtn_clicked()
{ui->tableWidget->clearContents();         //清空表格内容//准备sql语句QString sql;if(ui->nameEdit->text().isEmpty()){sql = "select * from Stu;";         //表示查询所有表中信息}else{sql = tr("select * from Stu where name='%1';").arg(ui->nameEdit->text());}qDebug()<<sql;//准备sql执行者QSqlQuery querry;if(!querry.exec(sql)){QMessageBox::information(this,"提示","查询失败");qDebug() << "失败原因:"<< querry.lastError().text();return;}//程序执行至此,查询结果保存在querry类对象中了//可以调用该类的成员函数next进行遍历该结果集int i = 0;while(querry.next()){//循环中表示,querry指向的任意一条记录//可以调用成员函数record函数获取当前指向的记录数据:querry.record//querry.record().count():返回当前记录的字段个数//querry.record().value(i):表示的是当前记录的下标为i的字段的值//qDebug()<<querry.record().value(1).toString();//将查询的数据展示到ui界面//准备数据容器for(int j=0; j<querry.record().count(); j++){QTableWidgetItem *item = new QTableWidgetItem(querry.record().value(j).toString());//将当前项目设置到 ui界面的(i,j)下标处ui->tableWidget->setItem(i,j, item);}i++;            //表示遍历下一行}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com