华为云征文|Flexus云服务X实例应用,通过QT连接华为云MySQL,进行数据库的操作,数据表的增删改查

本文主要是介绍华为云征文|Flexus云服务X实例应用,通过QT连接华为云MySQL,进行数据库的操作,数据表的增删改查,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

引出


4核12G-100G-3M规格的Flexus X实例使用测评第3弹:Flexus云服务X实例应用,通过QT连接华为云MySQL,进行数据库的操作,数据表的增删改查

什么是Flexus云服务器X实例

官方解释:

Flexus云服务器X实例是新一代面向中小企业和开发者打造的柔性算力云服务器,可智能感知业务负载,适用于电商直播、企业建站、开发测试环境、游戏服务器、音视频服务等中低负载场景。相较于Flexus应用服务器L实例,Flexus云服务器X实例的优势包含:提供丰富的公共镜像、可灵活自定义vCPU内存配比、智能感知业务动态升降配,负载范围更高等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

QT连接华为云MySQL

创建连接

通过QSqlDatabase设置和华为云数据库的连接,需要指定驱动,然后设置主机端口,数据库名称,用户名和密码

bool MainWindow::connectMySQL(){qDebug() << "\n======进行数据库的链接====";dbWeb = QSqlDatabase::addDatabase("QODBC"); // 使用 QMYSQL 驱动dbWeb.setHostName(""); // 云数据库的主机地址dbWeb.setPort(3306); // 端口dbWeb.setDatabaseName("huawei"); // 数据库名称dbWeb.setUserName("root"); // 用户名dbWeb.setPassword(""); // 密码if (!dbWeb.open()) {qDebug() << "Database error occurred:" << dbWeb.lastError().text();return false;}qDebug() << "连接成功";return true;
}

数据库操作和表创建

查询现有的数据库

查询现有的所有数据库,通过QT中提供的QSqlQuery进行查询

void MainWindow::queryDataBase(QSqlDatabase db){// 查询数据库的库qDebug() << "\n========查询库========";QSqlQuery query(db);if(query.exec("SHOW DATABASES")){while (query.next()) {QString databaseName = query.value(0).toString();qDebug() << "DB" << databaseName;}}else {qDebug() << "error:" << dbWeb.lastError().text();}
}

控制台打印出查询的结果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建数据库

执行新建数据库的操作,通过query进行执行

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

函数功能优化,支持输入数据库的名称进行新建数据库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void MainWindow::createDataBase(QSqlDatabase db, QString dbName){qDebug() << "\n=======创建数据库" << dbName << "=======";queryDataBase(db);// 新建数据库QSqlQuery query(db);QString q = "CREATE DATABASE IF NOT EXISTS " + dbName;if(!query.exec(q)){qDebug() << "error:" << db.lastError().text();}queryDataBase(db);
}

在库中创建表

在ODBC中设置数据库

首先在ODBC中编辑连接,选择DataBase为想要插入的表,选择Database下拉菜单,可以看到我们放个创建的数据表,这里选择example_db这个数据库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编写代码执行,在数据库中创建一张新的表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	    QSqlQuery query(db);QString createTableQuery = R"(CREATE TABLE IF NOT EXISTS Person (id INTEGER,name TEXT,age INTEGER))";if (!query.exec(createTableQuery)) {qDebug() << "Error: Unable to create table." << query.lastError();}

数据表的操作–增删改查

数据增加插入

通过qt往华为云的数据库中插入数据,我们设置了主键自增,所以只需要传名字和年龄即可;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

bool MainWindow::insertData(QSqlDatabase db,const QString &name,int age){
//    qDebug() << "\n========插入数据=======";QSqlQuery query(db);query.prepare("INSERT INTO Person (name, age) VALUES (:name, :age)");query.bindValue(":name", name);query.bindValue(":age", age);if (!query.exec()) {qDebug() << "Error: Unable to insert data into table 'Person'." << query.lastError();return false;}return true;
}

数据的删除

两种删除的方式:

1.通过id删除,通过数据表的主键进行删除,一次删除一个数据;

2.通过名字删除,会一次删除多行数据;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

bool MainWindow::deleteByName(QSqlDatabase db, const QString &name){QSqlQuery query(db);query.prepare("DELETE FROM Person WHERE name = :name");query.bindValue(":name", name);if (!query.exec()) {qDebug() << "Error: Unable to delete data from table 'Person' by name." << query.lastError();return false;}return true;
}bool MainWindow::deleteByID(QSqlDatabase db, int id){QSqlQuery query(db);query.prepare("DELETE FROM Person WHERE id = :id");query.bindValue(":id", id);if (!query.exec()) {qDebug() << "Error: Unable to delete data from table 'Person' by id." << query.lastError();return false;}return true;
}

数据的修改

选择id为特定值的数据进行修改,可以同时修改名字和年龄,也可以只修改名字,或者只需改年龄;

如果年龄输入-1,则只修改名字

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果名字为空,则只修改年龄

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

bool MainWindow::updateByID(QSqlDatabase db, int id, const QString &newName,int newAge){QSqlQuery query(db);// 构建更新SQL语句QString updateQuery = "UPDATE Person SET";bool nameToUpdate = !newName.isEmpty();bool ageToUpdate = newAge != -1;if (nameToUpdate) {updateQuery += " name = :name";}if (ageToUpdate) {if (nameToUpdate) {updateQuery += ",";}updateQuery += " age = :age";}updateQuery += " WHERE id = :id";query.prepare(updateQuery);if (nameToUpdate) {query.bindValue(":name", newName);}if (ageToUpdate) {query.bindValue(":age", newAge);}query.bindValue(":id", id);if (!query.exec()) {qDebug() << "Error: Unable to update data in table 'Person' by id." << query.lastError();return false;}return true;}

数据的查询

首先重写实体类的<< 方法,提供格式化输出函数,方便控制台打印查看

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

QDebug operator<<(QDebug dbg, const Person &data) {dbg.nospace() << "person("<< QString::number(data.id) << ","<< data.name  << ","<< QString::number(data.age)  << ")";return dbg.space();
}

根据ID查询单个

设置了主键自增,是唯一的,所有通过id查询,会查询到一个数据;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Person MainWindow::queryById(QSqlDatabase db, int id){QSqlQuery query(db);query.prepare("SELECT name, age FROM Person WHERE id = :id");query.bindValue(":id", id);if (!query.exec()) {qDebug() << "Error: Unable to query data from table 'Person' by id." << query.lastError();return Person(-1,"",-1);}if (query.next()) {QString name = query.value("name").toString();int age = query.value("age").toInt();return Person(id, name, age);}return Person(-1,"",-1);;
}

根据name查询多个

人员的名字会重复,一次性会查询出多个,所以用一个容器进行数据的接收。

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.

// 根据名字查询多个
std::vector<Person> MainWindow::queryByName(QSqlDatabase db, const QString &name){QSqlQuery query(db);query.prepare("SELECT id, name, age FROM Person WHERE name = :name");query.bindValue(":name", name);std::vector<Person> persons;if (!query.exec()) {qDebug() << "Error: Unable to query data from table 'Person' by name." << query.lastError();return persons;}while (query.next()) {int id = query.value("id").toInt();QString name = query.value("name").toString();int age = query.value("age").toInt();persons.emplace_back(id, name, age);}return persons;
}

总结

4核12G-100G-3M规格的Flexus X实例使用测评第3弹:Flexus云服务X实例应用,通过QT连接华为云MySQL,进行数据库的操作,数据表的增删改查

这篇关于华为云征文|Flexus云服务X实例应用,通过QT连接华为云MySQL,进行数据库的操作,数据表的增删改查的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134186

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为