c++实现mysql关系型数据库连接与增删改查操作

最近老师让我实现这个功能,顺便发个东西,我感觉mysql从入门到精通这本书写的蛮好的,其实连接数据库就是调用mysql-c-api库里面的函数mysql_real_connect,下来的增删改查,也无非就是cmd命令台里面的语句,插入:insert into.....values......;删除:delete from.....;更新:update set......;查询:select*from......

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>

// 连接数据库函数
bool ConnectDatabase(MYSQL* mysql) {
    // 初始化数据库
    mysql_init(mysql);//初始化传入的 MYSQL 结构体,设置其内部状态为默认值,准备进行数据库连接

    // 设置字符编码
    mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "gbk");

    // 连接数据库
    if (mysql_real_connect(mysql, "127.0.0.1", "root", "Zyc679613", "db_test", 3306, NULL, 0) == NULL) {//3306端口号
        printf("错误原因: %s\n", mysql_error(mysql));
        printf("连接失败!\n");
        return false;
    }
    return true;
}

// 断掉数据库连接的函数
void DisconnectDatabase(MYSQL* mysql) {
    if (mysql != NULL) {
        mysql_close(mysql);//自带的关闭函数
    }
}

// 执行SQL查询并返回结果
MYSQL_RES* ExecuteQueryAndGetResult(MYSQL* mysql, const char* query) {
    if (mysql_query(mysql, query)) {//mysql_query 是一个PHP函数,它用于执行一个MySQL数据库查询
        printf("Query failed: %s\n", mysql_error(mysql));
        return NULL;
    }
    return mysql_store_result(mysql);
}

// 插入数据函数
void InsertData(MYSQL* mysql, const char* books, const char* category, const char* user, int sale, const char* sort, const char* brands) {
    char query[256];//整一个足够大的字符数组
    snprintf(query, sizeof(query), "INSERT INTO tb_books (books, category, user, sale, sort, brands) VALUES ('%s', '%s', '%s', %d, '%s', '%s')",
        books, category, user, sale, sort, brands);//snprintf返回成功写入的字符,第一个参数指针,第二个大小,第三个格式化。
    if (mysql_query(mysql, query)) {//snprintf 将 SQL 插入语句格式化并写入到 query 数组中,sizeof(query) 确保了写入不会超过数组的大小,从而避免了潜在的安全问题。
        printf("Insert failed: %s\n", mysql_error(mysql));
    }
    else {
        printf("Insert successful!\n");
    }
}

// 查询数据函数,展示函数
void SelectData(MYSQL* mysql) {
    MYSQL_RES* res = ExecuteQueryAndGetResult(mysql, "SELECT * FROM tb_books");
    if (res) {//非空
        MYSQL_ROW row;//指向行数据的指针
        while ((row = mysql_fetch_row(res))) {//mysql_fetch_row 来逐行获取数据
            printf("ID: %s, Books: %s, Category: %s, User: %s, Sale: %s, Sort: %s, Brands: %s\n",
                row[0], row[1], row[2], row[3], row[4], row[5], row[6]);
        }
        mysql_free_result(res);//用于释放查询结果集的内存
    }
}

// 更新数据函数
void UpdateData(MYSQL* mysql, int id, const char* books, const char* category, const char* user, int sale, const char* sort, const char* brands) {
    char query[256];
   // 使用snprintf安全地构造SQL更新语句
    snprintf(query, sizeof(query), "UPDATE tb_books SET books = '%s', category = '%s', user = '%s', sale = %d, sort = '%s', brands = '%s' WHERE id = %d",
        books, category, user, sale, sort, brands, id);
    //更新
    if (mysql_query(mysql, query)) {
        printf("Update failed: %s\n", mysql_error(mysql));
    }
    else {
        printf("Update successful!\n");
    }
}

// 删除数据函数
void DeleteData(MYSQL* mysql, int id) {
    char query[256];
    snprintf(query, sizeof(query), "DELETE FROM tb_books WHERE id = %d", id);
    if (mysql_query(mysql, query)) {
        printf("Delete failed: %s\n", mysql_error(mysql));
    }
    else {  
        printf("Delete successful!\n");
    }
}

// 主函数
int main() {
    MYSQL mysql;// 声明MYSQL结构体变量用于数据库操作
    if (ConnectDatabase(&mysql)) {// 尝试连接数据库
        // 插入数据示例
        InsertData(&mysql, "张宇超自传", "人文科学类", "newuser", 10, "New Sort", "New Brands");

        // 查询数据
        printf("Data after insertion:\n");
        SelectData(&mysql);

        // 更新数据示例
        UpdateData(&mysql, 1, "更新后的Book", "更新后的Category", "updateduser", 20, "更新后的Sort", "更新后的Brands");

        // 再次查询数据以查看更新结果
        printf("Data after update:\n");
        SelectData(&mysql);

        // 删除数据示例
        DeleteData(&mysql, 1);

        // 最后查询数据以查看删除结果
        printf("Data after deletion:\n");
        SelectData(&mysql);

        // 断开连接
        DisconnectDatabase(&mysql);
    }

    system("pause");
    return 0;
}

结果如下:

也可以看看cmd命令行里面的

相关推荐
IT19953 小时前
Fail2Ban 防护 MySQL 实战|登录失败 3 次,IP 封禁 24 小时
数据库·mysql
夕除3 小时前
redis--IO 多路复用(select + poll)
数据库·sql
青瓦梦滋3 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
paopaokaka_luck5 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
lzhdim7 小时前
100条常用SQL语句
数据库·sql·mysql·mybatis
天河归来7 小时前
从原始消息到业务数据:三层数据架构的设计与实践
数据库·数据仓库·架构
数据库小学妹7 小时前
金融数据库成本怎么算?五笔钱加一张TCO表
数据库·金融行业·数据库选型·国产化替代·tco·金融数据库
KaiwuDB7 小时前
KaiwuDB 分布式集群扩缩容,从原理到完整操作踩坑总结
运维·数据库·分布式
auspicious航7 小时前
PostgreSQL的备份与恢复
数据库·postgresql
这个DBA有点耶8 小时前
从 MySQL 到时序数据库:我帮朋友做迁移的完整记录
数据库·架构·dba