怎么做自己的个人网站/seo关键词智能排名

怎么做自己的个人网站,seo关键词智能排名,网站开发的基础课程,做网站开店数据库简介 关于数据库的基础知识这里就不做介绍了,相关博客可以查看: SQL基础知识 数据库学霸笔记 上面博客都写的比较详细,本文主要介绍如何使用Qt进行数据库相关操作,数据库分为关系型数据库和非关系型数据,关系…

数据库简介

关于数据库的基础知识这里就不做介绍了,相关博客可以查看:

SQL基础知识

数据库学霸笔记

上面博客都写的比较详细,本文主要介绍如何使用Qt进行数据库相关操作,数据库分为关系型数据库和非关系型数据,关系型数据库主要有Sqlite、MySQL、Oracle、SQLServer、PostgreSQL等,非关系型数据库主要有Redis、Cassandra、MongoDB等。这次主要介绍Qt使用SQlite数据库。

基础SQL操作

Qt使用数据库工程文件记得引入sql模块:

QT  += sql

数据库初始化:

    //查看支持的数据库驱动for (const QString &driver : QSqlDatabase::drivers()) {qDebug() << driver;}//建立数据库连接m_Db = QSqlDatabase::addDatabase("QSQLITE");//设置本地数据库文件m_Db.setDatabaseName("test.db");//打开数据库if (!m_Db.open()) { qDebug() << "open db fail"; }//创建表QString execSql =QString("create table if not exists testinfo(name varchar(64),id ""varchar(64),createdate varchar(64))");//遍历输出该数据库中所有表名for (const QString &table : m_Db.tables()) { qDebug() << table; }QSqlQuery query;if (!query.exec(execSql)) { qDebug() << query.lastError().text(); }

上述代码中先查看数据库驱动,数据库驱动是应用程序和数据库之间的桥梁,提供访问数据库所需的工具和 API(应用程序编程接口)。查看程序输出打印:

Qt默认支持一些驱动,可以看到有SQlite,但是没有MySQL,如若要用Qt进行MySQL相关数据库操作则需额外安装相关驱动(本文不作介绍)。然后查看生成了对应的数据库文件test.db。

如何查看这个数据库文件了,我推荐使用DB browser for SQLite,使用比较简单,使用该软件打开对应数据库文件:

可以看到我们在代码中创建的表,点击"浏览数据":

数据库表数据相关操作,无非增删查改四种,界面添加对应按钮,编写对应槽函数代码。

增:

void MainWindow::on_insert_clicked() {if (ui->name->text().isEmpty() || ui->id->text().isEmpty()) { return; }if (!m_Db.isOpen()) { return; }QString name = ui->name->text().trimmed();QString id = ui->id->text().trimmed();QString date = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");QString execSql = QString("insert into testinfo (name,id, createdate) ""values('%1', '%2', '%3')").arg(name).arg(id).arg(date);QSqlQuery query;if (!query.exec(execSql)) { qDebug() << query.lastError().text(); }
}

输入数据点击添加按钮:

查看数据表内容:

 可以看到一条数据已经成功添加。

删:

void MainWindow::on_delete_2_clicked() {if (ui->name->text().isEmpty()) { return; }if (!m_Db.isOpen()) { return; }QString name = ui->name->text().trimmed();QString execSql =QString("delete from testinfo where name = '%1';").arg(name);QSqlQuery query;if (!query.exec(execSql)) { qDebug() << query.lastError().text(); }
}

我在数据库中添加了一条数据,然后点击按钮删除对应指定name的数据

点击按钮后数据已删除:

 查:

void MainWindow::on_select_clicked() {QString name = ui->name->text();QString id = ui->id->text();QString execSql = QString();if (name.isEmpty() && id.isEmpty()) {execSql = QString("select * from testinfo");} else if (!name.isEmpty() && id.isEmpty()) {execSql = QString("select * from testinfo where name = '%1'").arg(name);} else if (name.isEmpty() && !id.isEmpty()) {execSql = QString("select * from testinfo where id = '%1'").arg(id);} else {execSql =QString("select * from testinfo where name = '%1' and id = '%2'").arg(name).arg(id);}QSqlQuery query;if (!query.exec(execSql)) {qDebug() << query.lastError().text();} else {while (query.next()) {QSqlRecord rec = query.record(); //获取列QStringList vals;for (int i = 0; i < rec.count(); ++i) {vals.append(rec.value(i).toString());}ui->textEdit->append(vals.join(","));}}
}

执行效果不作演示。(select的where用法比较多,详细可以查看文章开头推荐的第一篇博客)

改:

void MainWindow::on_update_clicked() {//修改指定name的id值if (ui->name->text().isEmpty() || ui->id->text().isEmpty()) { return; }if (!m_Db.isOpen()) { return; }QString name = ui->name->text().trimmed();QString id = ui->id->text().trimmed();QString execSql = QString("update testinfo set id = '%1' where name = '%2'").arg(id).arg(name);QSqlQuery query;if (!query.exec(execSql)) { qDebug() << query.lastError().text(); }
}

根据界面输入的name和id,将指定name的数据id改为指定值:

额外补充:删除表为:drop+表名,该操作会将表中所有数据以及表结果删除,如果只是想删除所有数据则为: truncate+表名。

事务

事务是一组操作的集合,这些操作被视为一个单一的工作单元。事务要么完成所有操作,要么取消所有操作,保持数据库在良好的状态下。

比如我现在要一次性插入多条数据,用事务如下编写:

void MainWindow::on_test_clicked() {//使用事务添加100条数据QStringList sqlList;for (int i = 0; i < 100; ++i) {QString execSql = QString("insert into testinfo (name,id, createdate) ""values('%1', '%2', '%3')").arg(i).arg(i).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));sqlList.append(execSql);}if (!m_Db.isOpen()) { return; }m_Db.transaction(); //开启事务for (const QString &execSql : sqlList) {QSqlQuery query(m_Db);bool b = query.exec(execSql);if (!b) {m_Db.rollback(); //失败进行回滚return;}}m_Db.commit(); //事务提交
}

点击按钮后查看数据内容:

 

内容已添加。 

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

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

相关文章

网络安全 api 网络安全 ast技术

随着应用或者API被攻击利用已经越来越多&#xff0c;虽然来自开源组件的漏洞加剧了这一现象的发生&#xff0c;但是&#xff0c;其实主要还是在于应用程序或者API本身没有做好防范&#xff0c;根源在于源代码本身的质量没有严格把控。AST是指Application Security Testing&…

Mac 配置 Maven JDK

不使用 Homebrew&#xff0c;创建指定版本 JDK 1、官网下载指定版本并安装……省略 2、vi &#xff5e;/.zshrc 同时要检查 bash_profile 是否存在。 if [ -f ~/.bash_profile ] ; thensource ~/.bash_profile fiJAVA_HOME_11/Library/Java/JavaVirtualMachines/jdk-11.0.1…

【病毒分析】熊猫烧香病毒分析及其查杀修复

目录 前言 一、样本概况 1.1 样本信息 1.2 测试环境及工具 1.3 分析目标 二、具体行为分析 2.1 主要行为 2.1.1 恶意程序对用户造成的危害 2.2 恶意代码分析 2.2.1 加固后的恶意代码树结构图(是否有加固) 2.2.2 恶意程序的代码分析片段 三、解决方案(或总结) 3.1 …

sqli-lab靶场学习(八)——Less26-28

前言 25关已经出现了初步的一些关键字过滤&#xff0c;通过双写可以绕过。后面的关卡&#xff0c;我们会遇到更多关键字过滤&#xff0c;需要各种技巧绕过。 Less26 第26关写了会过滤空格和注释符。有很多的答案&#xff0c;会用%a0替代空格&#xff0c;但据说这是sqli-labs部…

python:VOC格式数据集转换为YOLO数据集格式

作者&#xff1a;CSDN _养乐多_ 本文将介绍如何将目标检测中常用的VOC格式数据集转换为YOLO数据集&#xff0c;并进行数据集比例划分&#xff0c;从而方便的进行YOLO目标检测。 如果不想分两步&#xff0c;可以直接看第三节代码。 文章目录 一、将VOC格式数据集转换为YOLO格…

Docker容器安装软件(完整版)

文章目录 一、安装Docker1.1 docker 相关的命令1.2 配置镜像加速 二. 安装es2.1 创建网络2.2 拉取镜像2.3 创建挂载点目录2.4 部署单点es&#xff0c;创建es容器2.5 编写elasticsearch.yml2.6 重启es容器2.7 测试Elasticsearch是否安装成功 三. 基于Docker安装Kibana3.1 拉取镜…

NetAssist 5.0.14网络助手基础使用及自动应答使用方案

以下是NetAssist v5.0.14自动应答功能的详细使用步骤&#xff1a; 一、基础准备&#xff1a; 工具下载网址页面&#xff1a;https://www.cmsoft.cn/resource/102.html 下载安装好后&#xff0c;根据需要可以创建多个server&#xff0c;双击程序图标运行即可&#xff0c;下面…

node.js-node.js作为服务器,前端使用WebSocket(单个TCP连接上进行全双工通讯的协议)

1.WebSocket全双工通信协议 WebSocket是HTML5开始提供的一种单个TCP连接上进行全双工通讯的协议。让客户端和服务器间的数据交互变得简单&#xff0c;允许服务端向客户端主动推送数据。浏览器和服务器间只需要完成一次握手&#xff0c;两者间创建持久性的连接&#xff0c;并进行…

java后端开发day31--集合进阶(一)-----Collection集合List集合数据结构1

&#xff08;以下内容全部来自上述课程&#xff09; 1.集合体系结构 List系列集合&#xff1a;添加的元素是有序、可重复、有索引。 Set系列集合&#xff1a;添加的元素是无序、不重复、无索引。 2.Collection集合 Collection是单列集合的祖宗接口&#xff08;不可直接创建…

Qt配置OpenGL相机踩的坑

项目根据LearnOpenGL配置Qt的相机&#xff0c;更新view矩阵和project矩阵的位移向量变得很大&#xff0c;我设置的明明相机位置是(0,0,3)&#xff0c;理想的位移向量刚好是相反数(0,0,-3)&#xff0c;对应的view矩阵位置向量可以变成(0,0,1200)…离模型非常远矩阵模型也看不见&…

关于WPS的Excel点击单元格打开别的文档的两种方法的探究【为单元格添加超链接】

问题需求 目录和文件结构如下&#xff1a; E:\Dir_Level1 │ Level1.txt │ └─Dir_Level2│ Level2.txt│ master.xlsx│└─Dir_Level3Level3.txt现在要在master.xlsx点击单元格进而访问Level1.txt、Level2.txt、Level3.txt这些文件。 方法一&#xff1a;“单元格右键…

聚类中的相似矩阵和拉普拉斯矩阵

前言&#xff08;可以略过&#xff09; 最近在看的是关于聚类的论文&#xff0c;之前对聚类的步骤和相关内容不太了解&#xff0c;为了读懂论文就去学习了一下&#xff0c;这里将自己的理解记录下来。学习的不全面&#xff0c;主要是为了看懂论文&#xff0c;后续如果有涉及到聚…

前端笔记 --- vue框架

目录 基础知识 指令的修饰符 计算属性 watch侦听器的写法 Vue的生命周期 工程化开发&脚手架 VUE CLI 组件注册的方式 scoped样式冲突与原理 data 组件之间的关系和组件通信 v-model详解 sync修饰符 Dom介绍 操作HTML标签 总结 ref 和 $refs $nextTick 自…

智能双剑合璧:基于语音识别与大模型的技术沙龙笔记整理实战

智能双剑合璧&#xff1a;基于语音识别与大模型的技术沙龙笔记整理实战 ——记一次网络安全技术沙龙的高效知识沉淀 引言&#xff1a;当网络安全遇上AI生产力工具 在绿盟科技举办的"AI驱动的未来网络安全"内部技术沙龙中&#xff0c;笔者亲历了一场关于网络安全攻…

数据结构(蓝桥杯常考点)

数据结构 前言&#xff1a;这个是针对于蓝桥杯竞赛常考的数据结构内容&#xff0c;基础算法比如高精度这些会在下期给大家总结 数据结构 竞赛中&#xff0c;时间复杂度不能超过10的7次方&#xff08;1秒&#xff09;到10的8次方&#xff08;2秒&#xff09; 空间限制&#x…

第56天:Web攻防-SQL注入增删改查盲注延时布尔报错有无回显错误处理审计复盘

#知识点 1、Web攻防-SQL注入-操作方法&增删改查 2、Web攻防-SQL注入-布尔&延时&报错&盲注 一、增删改查 1、功能&#xff1a;数据查询 查询&#xff1a;SELECT * FROM news where id$id 2、功能&#xff1a;新增用户&#xff0c;添加新闻等 增加&#xff1a;IN…

串口通信函数汇总-ing

谢谢各位佬的阅读&#xff0c;本文是我自己的理解&#xff0c;如果您发现错误&#xff0c;麻烦请您指出&#xff0c;谢谢 首先谈谈我自己对于串口的理解&#xff0c;随便拿一个嵌入式的板子&#xff0c;它上面有两个引脚&#xff0c;一个是rx&#xff0c;一个是tx&#xff0c;r…

如何用HTML5 Canvas实现电子签名功能✍️

&#x1f916; 作者简介&#xff1a;水煮白菜王&#xff0c;一位前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 前端专栏 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧和知识归纳总结✍。 感谢支持&#x1f495;&#x1f495;&#…

2024年广州市智能网联汽车创新实践年度报告

政策法规方面&#xff0c;积极推进《广州市智能网联汽车创新发展条例》的制定和发布&#xff0c;不断完善法规标准体系&#xff0c;为产业创新发展营造良好政策环境&#xff1b;技术创新方面&#xff0c;企业加大研发投入&#xff0c;在自动驾驶算法、车联网安全等关键领域取得…

计算机操作系统(一) 什么是操作系统

计算机操作系统&#xff08;一&#xff09; 什么是操作系统 前言一、什么是操作系统二、操作系统的作用三、推动操作系统发展的主要动力总结&#xff08;核心概念速记&#xff09;&#xff1a; 前言 当你打开电脑、点击应用、播放音乐时&#xff0c;是谁在背后默默协调这一切&…