QT:SQLITE数据库编程

pro文件:QT         += core gui sql

widget.ui

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w("./student.db");  //传入文件名w.show();return a.exec();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QSqlDatabase>  //数据库连接
#include <QSqlQuery>    //执行SQL语句namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QString filename, QWidget *parent = 0);  //数据库文件名,存储数据库的操作~Widget();void showInfo();void clearInput();private slots:void on_pb_add_clicked();void on_pb_delete_clicked();void on_pb_query_clicked();void on_pb_update_clicked();private:Ui::Widget *ui;QSqlDatabase db_student;   //表示数据库的连接QString db_file_name;   //数据库文件名};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QFile>   //文件类
#include <QDebug>
#include <QSqlError>Widget::Widget(QString filename, QWidget *parent) :QWidget(parent),ui(new Ui::Widget),db_file_name(filename)
{ui->setupUi(this);ui->cbb_gender->setCurrentIndex(-1);ui->cbb_gender->setFixedSize(224,40);ui->te_table_content->setReadOnly(true);QFile file(db_file_name);  //要操作的文件名if(!file.exists()){//数据库文件不存在表示这个程序第一次被运行//连接数据库,创建数据库表,生成数据库文件//"QSQLITE"表示创建的是基于sqlite数据库的连接db_student = QSqlDatabase::addDatabase("QSQLITE");//设置数据库文件的名字db_student.setDatabaseName(db_file_name);//打开数据库if(!db_student.open()){qDebug() << "打开数据库失败1";}else{qDebug() << "打开数据库成功1";}//QSqlQuery用于SQL语句的执行,对返回结果的使用//要指定使用的数据库的连接 db_studentQSqlQuery sql_query(db_student);//创建数据库表QString str_query = "create table Student(id varchar(64) PRIMARY KEY,name varchar(64),gender varchar(64),age int)";//执行SQL语句if(!sql_query.exec(str_query)){qDebug() << str_query <<"failed";qDebug() << sql_query.lastError().text();}//向数据库表Student插入数据(方式一)str_query = "insert into Student values('2310060001','张三','男',15)";if(!sql_query.exec(str_query)){qDebug() << str_query << "failed";qDebug() << sql_query.lastError().text();}//向数据库表Student插入数据(方式二)str_query = "insert into Student values(?,?,?,?)";//准备SQL语句sql_query.prepare(str_query);//绑定待定的数据,取代SQL语句里的?sql_query.addBindValue("2310060002");sql_query.addBindValue("李四");sql_query.addBindValue("男");sql_query.addBindValue(16);if(!sql_query.exec()){qDebug() << str_query << "failed";qDebug() << sql_query.lastError().text();}//向数据库表Student插入数据(方式三)str_query = "insert into Student values(:id,:name,:gender,:age)";sql_query.prepare(str_query);//绑定待定的数据sql_query.bindValue(":id","2310060003");sql_query.bindValue(":name","王五");sql_query.bindValue(":gender","女");sql_query.bindValue(":age",20);if(!sql_query.exec()){qDebug() << str_query << "failed";qDebug() << sql_query.lastError().text();  //打印具体错误}}else{db_student = QSqlDatabase::addDatabase("QSQLITE");//设置数据库文件的名字db_student.setDatabaseName(db_file_name);//打开数据库if(!db_student.open()){qDebug() << "打开数据库失败2";}else{qDebug() << "打开数据库成功2";}}// 显示Student表中所有的记录showInfo();
}Widget::~Widget()
{delete ui;
}//更新信息显示
void Widget::showInfo()
{QSqlQuery sql_query(db_student);  //执行QSL语句QString str_query = "select * from Student";if(!sql_query.exec(str_query)){qDebug() << str_query << "failed";qDebug() << sql_query.lastError().text();}ui->te_table_content->clear();while(sql_query.next())  //获得当前的一整条记录{QString s1;for(int i = 0;i < 4;i++) //id,name,gender,age{s1 += sql_query.value(i).toString();  //获得一条记录中的第i个表项,0 bases1 += " ";}ui->te_table_content->append(s1);}
}//清空
void Widget::clearInput()
{ui->le_id->clear();ui->le_name->clear();ui->cbb_gender->setCurrentIndex(-1);ui->le_age->clear();
}//新增
void Widget::on_pb_add_clicked()
{QSqlQuery sql_query(db_student);QString str_query = "insert into Student values(?,?,?,?)";  //id,name,gender,age//准备SQL语句sql_query.prepare(str_query);//绑定待定的数据,取代SQL语句里的?sql_query.addBindValue(ui->le_id->text());sql_query.addBindValue(ui->le_name->text());sql_query.addBindValue(ui->cbb_gender->currentText());sql_query.addBindValue(ui->le_age->text().toInt());if(!sql_query.exec()){qDebug() << str_query << "failed";qDebug() << sql_query.lastError().text();}clearInput();showInfo();
}//删除
void Widget::on_pb_delete_clicked()
{QSqlQuery sql_query(db_student);QString str_query = "delete from Student where id = :id";sql_query.prepare(str_query);sql_query.bindValue(":id",ui->le_id->text());if(!sql_query.exec()){qDebug() << str_query << "failed";qDebug() << sql_query.lastError().text();}clearInput();showInfo();
}//查询
void Widget::on_pb_query_clicked()
{QSqlQuery sql_query(db_student);  //操作的数据库QString str_query = "select * from Student where id = :id";sql_query.prepare(str_query);sql_query.bindValue(":id",ui->le_id->text());if(!sql_query.exec()){qDebug() << str_query << "failed";qDebug() << sql_query.lastError().text();}while(sql_query.next())  //获得当前的一整条记录 id,name,gender,age{ui->le_name->setText(sql_query.value(1).toString());ui->cbb_gender->setCurrentText(sql_query.value(2).toString());ui->le_age->setText(sql_query.value(3).toString());}
}//修改
void Widget::on_pb_update_clicked()
{QSqlQuery sql_query(db_student);QString str_query = "update Student set name = ?,gender = ?,age = ? where id = ?";sql_query.prepare(str_query);sql_query.addBindValue(ui->le_name->text());sql_query.addBindValue(ui->cbb_gender->currentText());sql_query.addBindValue(ui->le_age->text().toInt());sql_query.addBindValue(ui->le_id->text());if(!sql_query.exec()){qDebug() << str_query << "failed";qDebug() << sql_query.lastError().text();}clearInput();showInfo();
}

结果

新增

删除

查询

修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/128096.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows11 安全中心页面不可用问题(无法打开病毒和威胁防护)解决方案汇总(图文介绍版)

本文目录 Windows版本与报错信息问题详细图片&#xff1a; 解决方案:方案一、管理员权限&#xff08;若你确定你的电脑只有你一个账户&#xff0c;则此教程无效&#xff0c;若你也不清楚&#xff0c;请阅读后再做打算&#xff09;方案二、修改注册表(常用方案)方案三、进入开发…

【项目】5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型

5.1阻塞和非阻塞、同步和异步&#xff08;网络IO&#xff09; 典型的一次IO的两个阶段是什么&#xff1f;数据就绪和数据读写 数据就绪&#xff1a;根据IO操作的就绪状态 阻塞非阻塞 数据读写&#xff1a;根据应用程序和内核的交互方式 同步异步 陈硕&#xff1a;在处理IO的…

初识Spring

目录 1.Spring 基础 2.传统程序开发 3.IoC程序开发&#xff08;解耦&#xff09; 4.DI 4.1 IoC 和 DI 有什么区别 1.Spring 基础 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃⽽庞⼤的社区&…

【Unity】RenderFeature笔记

【Unity】RenderFeature笔记 RenderFeature是在urp中添加的额外渲染pass&#xff0c;并可以将这个pass插入到渲染列队中的任意位置。内置渲染管线中Graphics 的功能需要在RenderFeature里实现,常见的如DrawMesh和Blit ​ 可以实现的效果包括但不限于 后处理&#xff0c;可以编写…

AI伦理:如何确保人工智能的公平与透明

文章目录 什么是AI伦理&#xff1f;AI公平性AI透明性 为什么AI公平性和透明性重要&#xff1f;确保AI公平性的方法1. 数据收集和准备2. 算法和模型3. 解释和可解释性4. 持续监测 确保AI透明性的方法1. 记录决策2. 可解释性工具3. 用户教育 AI伦理的挑战和未来结论 &#x1f389…

MongoDB——window11安装mongodb5.0.21版本服务端(图解版)

目录 一、mongodb官网下载地址二、安装步骤三、配置环境变量四、运行mongodb 一、mongodb官网下载地址 mongodb官网下载地址&#xff1a;https://www.mongodb.com/try/download/community 二、安装步骤 双击运行下载好的mongodb-windows-x86_64-5.0.21-signed.msi安装包&am…

golang gin——中间件编程以及jwt认证和跨域配置中间件案例

中间件编程jwt认证 在不改变原有方法的基础上&#xff0c;添加自己的业务逻辑。相当于grpc中的拦截器一样&#xff0c;在不改变grpc请求的同时&#xff0c;插入自己的业务。 简单例子 func Sum(a, b int) int {return a b }func LoggerMiddleware(in func(a, b int) int) f…

【Java 进阶篇】HTML块级元素详解

HTML&#xff08;Hypertext Markup Language&#xff09;是用于创建网页的标记语言。在HTML中&#xff0c;元素被分为块级元素和内联元素两种主要类型。块级元素通常用于构建网页的结构&#xff0c;而内联元素则嵌套在块级元素内&#xff0c;用于添加文本和其他内容。本文将重点…

电梯安全监测丨S271W无线水浸传感器用于电梯机房/电梯基坑水浸监测

城市化进程中&#xff0c;电梯与我们的生活息息相关。高层住宅、医院、商场、学校、车站等各种商业体建筑、公共建筑中电梯为我们生活工作提供了诸多便利。 保障电梯系统的安全至关重要&#xff01;特别是电梯机房和电梯基坑可通过智能化改造提高其安全性和稳定性。例如在暴风…

微服务技术栈-Docker应用部署

文章目录 前言一、数据卷二、Docker 应用部署1、MySQL部署2、Tomcat部署3、Nginx部署4、Redis部署5、Kafka部署 总结 前言 之前文章讲到过&#xff0c;docker运行程序的过程就是去仓库把镜像拉到本地&#xff0c;然后用一条命令把镜像运行起来变成容器&#xff0c;接下来我们将…

C++设计模式-适配器(Adapter)

目录 C设计模式-适配器&#xff08;Adapter&#xff09; 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-适配器&#xff08;Adapter&#xff09; 一、意图 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工…

【jvm--方法区】

文章目录 1. 栈、堆、方法区的交互关系2. 方法区的内部结构3. 运行时常量池4. 方法区的演进细节5. 方法区的垃圾回收 1. 栈、堆、方法区的交互关系 方法区的基本理解&#xff1a; 方法区&#xff08;Method Area&#xff09;与 Java 堆一样&#xff0c;是各个线程共享的内存区…