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命令行里面的

相关推荐
一个不知名程序员www1 分钟前
算法学习入门---二分查找(C++)
c++·算法
万事大吉CC26 分钟前
SQL语法基础教程
数据库·oracle
2301_8079973827 分钟前
代码随想录-day26
数据结构·c++·算法·leetcode
闭着眼睛学算法36 分钟前
【双机位A卷】华为OD笔试之【排序】双机位A-银行插队【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·javascript·c++·python·算法·华为od
小欣加油38 分钟前
leetcode 3318 计算子数组的x-sum I
c++·算法·leetcode·职场和发展
betazhou42 分钟前
Oracle dgbroker常规命令管理简介
数据库·oracle·adg·dbbroker
海边夕阳20061 小时前
PostgreSQL性能调优:解决表膨胀、索引碎片和无效索引问题
数据库·经验分享·postgresql·性能优化
IT教程资源C1 小时前
(N_083)基于springboot毕业设计管理系统
mysql·springboot毕业管理
j_xxx404_2 小时前
C++ STL:list|了解list|相关接口|相关操作
开发语言·c++
一 乐2 小时前
个人理财系统|基于java+小程序+APP的个人理财系统设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·后端·小程序