C++ QT MYSQL基操
以下是一个C++ QT操作MySQL数据库的工具类示例代码,包括连接数据库、创建表、插入数据、删除数据、修改数据、查询数据、查询表字段名称等操作:
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlRecord>
#include <QDebug>
class MysqlTool
{
public:
MysqlTool(const QString& host, int port, const QString& dbname, const QString& user, const QString& password)
{
// 连接MySQL数据库
db_ = QSqlDatabase::addDatabase("QMYSQL");
db_.setHostName(host);
db_.setPort(port);
db_.setDatabaseName(dbname);
db_.setUserName(user);
db_.setPassword(password);
if (!db_.open()) {
qDebug() << "Failed to connect to database:" << db_.lastError().text();
}
}
~MysqlTool()
{
// 关闭数据库连接
db_.close();
}
bool createTable(const QString& tableName, const QStringList& fields)
{
QString sql = QString("CREATE TABLE IF NOT EXISTS %1 (%2)").arg(tableName).arg(fields.join(", "));
QSqlQuery query;
if (!query.exec(sql)) {
qDebug() << "Failed to create table:" << query.lastError().text();
return false;
}
return true;
}
bool insertData(const QString& tableName, const QStringList& fields, const QVariantList& values)
{
QString sql = QString("INSERT INTO %1 (%2) VALUES (%3)").arg(tableName).arg(fields.join(", ")).arg(values.join(", "));
QSqlQuery query;
if (!query.exec(sql)) {
qDebug() << "Failed to insert data:" << query.lastError().text();
return false;
}
return true;
}
bool deleteData(const QString& tableName, const QString& condition)
{
QString sql = QString("DELETE FROM %1 WHERE %2").arg(tableName).arg(condition);
QSqlQuery query;
if (!query.exec(sql)) {
qDebug() << "Failed to delete data:" << query.lastError().text();
return false;
}
return true;
}
bool updateData(const QString& tableName, const QString& setClause, const QString& condition)
{
QString sql = QString("UPDATE %1 SET %2 WHERE %3").arg(tableName).arg(setClause).arg(condition);
QSqlQuery query;
if (!query.exec(sql)) {
qDebug() << "Failed to update data:" << query.lastError().text();
return false;
}
return true;
}
bool selectData(const QString& tableName, const QStringList& fields, const QString& condition, QList<QVariantList>& result)
{
QString sql = QString("SELECT %1 FROM %2 WHERE %3").arg(fields.join(", ")).arg(tableName).arg(condition);
QSqlQuery query;
if (!query.exec(sql)) {
qDebug() << "Failed to select data:" << query.lastError().text();
return false;
}
while (query.next()) {
QVariantList record;
for (int i = 0; i < fields.size(); ++i) {
record.append(query.value(i));
}
result.append(record);
}
return true;
}
QStringList getFields(const QString& tableName)
{
QStringList result;
QSqlRecord record = db_.record(tableName);
for (int i = 0; i < record.count(); ++i) {
result.append(record.fieldName(i));
}
return result;
}
private:
QSqlDatabase db_;
};
使用示例:
int main()
{
MysqlTool mysql("localhost", 3306, "testdb", "root", "password");
// 创建表
QStringList fields = {"id INT PRIMARY KEY", "name VARCHAR(50)", "age INT"};
mysql.createTable("students", fields);
// 插入数据
QStringList insertFields = {"id", "name", "age"};
QVariantList insertValues = {1, "张三", 20};
mysql.insertData("students", insertFields, insertValues);
// 查询数据
QStringList selectFields = {"id", "name", "age"};
QList<QVariantList> selectResult;
mysql.selectData("students", selectFields, "age > 18", selectResult);
for (const auto& record : selectResult) {
int id = record[0].toInt();
QString name = record[1].toString();
int age = record[2].toInt();
qDebug() << "id:" << id << "name:" << name << "age:" << age;
}
// 更新数据
QString setClause = "age = 25";
QString condition = "id = 1";
mysql.updateData("students", setClause, condition);
// 删除数据
QString deleteCondition = "age < 18";
mysql.deleteData("students", deleteCondition);
// 查询表字段名称
QStringList fields = mysql.getFields("students");
qDebug() << "Fields:" << fields;
return 0;
}
以上代码仅供参考,实际使用时需要根据实际情况进行修改。
需要注意的是,使用QT操作MySQL数据库需要在项目文件中添加以下依赖项:
QT += sql
同时,也需要确保安装了MySQL数据库驱动程序,可以使用以下命令安装:
sudo apt-get install libqt5sql5-mysql
C++ QT MYSQL基操相关推荐
- MySQL 基操教程(五) SELECT 数据查看之大于、小于
前面介绍了使用 insert 对数据表进行数据的插入,在插入数据以后,我们简单使用 SELEECT 进行过查看插入的数据. SELECT * FROM book; SELECT 是查看插入数据的语句, ...
- C++ QT QNetworkAccessManager 基操
QNetworkAccessManager 是 Qt 框架中的一个类,用于管理网络访问.它提供了一种简单的方式来发送网络请求和接收响应,并支持多种协议,如 HTTP.FTP.HTTPS 等.QNetw ...
- C++ QT FTP基操
FTP是一种文件传输协议,可以通过网络将文件从一个计算机传输到另一个计算机.在C++ QT中,可以使用QNetworkAccessManager类来实现FTP上传和下载. FTP上传: 1. 创建QN ...
- C++ QT QDBus基操
以下是使用QDBus进行跨进程通信的具体用法: 1. 创建DBus服务 在服务端进程中,需要创建一个DBus服务,并注册DBus对象.示例代码如下: #include <QDBusConnect ...
- C++ QT QTcpSocket基操
QTcpSocket 是 Qt 框架中的一个类,用于实现 TCP 协议的套接字.它提供了基于流的 TCP 套接字通信,可以用于客户端和服务器端的网络通信.QTcpSocket 可以发送和接收数据,支持 ...
- C++ QT QSerialPort基操
以下是使用QSerialPort的基本步骤:1. 引入QSerialPort头文件 #include <QSerialPort>2. 创建QSerialPort对象 QSerialPort ...
- ThinkPHP6项目基操目录
前言 ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色 ...
- Spring Cloud Alibaba基础入门,一周学会基操!
Spring Cloud Alibaba基础入门,一周学会基操! 服务拆分: 1.不同微服务,不要重复开发相同业务 2.微服务数据独立,不要访问其它微服务的数据库 3.微服务可以将自己的业务暴露为接口 ...
- Qt MySQL (ubuntu)
MySQL连接 linux下QT+MYSQL开发 按这个程序,出现缺少QMySQL driver的提示 QSqlDatabase: QMYSQL driver not loaded QSqlDat ...
最新文章
- servlet接收multipart/form-data表单数据
- REST API 的安全基础
- Filebeat的下载(图文讲解)
- 设计模式十三:proxy(代理)——对象结构型模式
- RabbitMQ 四种Exchange
- CF1114F-Please, another Queries on Array?【线段树,欧拉函数】
- pojo类中list存储其他字段_List集合流处理类型小结
- “webservice远程测试显示 “测试窗体只能用于来自本地计算机
- SpringCloud工作笔记044---SpringCloud分布式服务器配置要求_记录一下
- springMVC文件上传的三种方法
- win10+64位 安装Theano并实现GPU加速
- C++ 不能在类体外指定关键字static
- 编译OpenJDK8:configure: Could not compile and link with freetype. This might be a 32/64-bit mismatch.
- hdu1243 最长公共子序列(LCS)
- 23考研倒计时,冲刺阶段这样做事半功倍!
- SSL 1203 书的复制
- QQ群发消息c语言编程,简单写一个实现QQ群发功能的软件
- 如何设置QQ和微信截图快捷键
- 后疫情时代的酒旅业,让用户“安心”成为行业复苏唯一解?
- Android性能优化系列篇(三):崩溃优化+卡顿优化
热门文章
- 黑马程序员21——交通灯管理系统
- 人脸属性分析--性别、年龄和表情识别,及其相关的数据集合
- 【sql: 练习题 28 ,29】查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况),查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数...
- 一键完成室内设计:哈佛学霸造出ArchiGAN,房间规划家具摆放全都有,Demo可玩...
- 高配笔记本使用CAD搬砖时卡死解决记录
- PageRank算法的Python实现
- vectorvn1610报价_意大利Vector 通讯模块
- 目前国内外的一些机器视觉公司汇总(2006年11月30日更新)
- 黑鸟每日安全资源推送​第26期(求关注转发,良心推送)
- JAVA程序设计(自主模式)-铺砖问题