C/C++ vs2017连接MySQL数据库 您所在的位置:网站首页 mysql数据库连接步骤 C/C++ vs2017连接MySQL数据库

C/C++ vs2017连接MySQL数据库

2024-05-29 22:40| 来源: 网络整理| 查看: 265

在开发中,数据库是必不可少,这篇文章将介绍使用C/C++如何进行连接MySQL数据库,并实现增删改查操作!

注意,此篇文章所讲的是C/C++如何操控MySQL进行简单的、常用的“增删改查”的操作!

目录 一、配置Visual Studio二、C/C++连接数据库1. 连接数据库 与 选择数据库2. 插入表数据3. 删除表数据4. 修改表数据5. 查询表数据

一、配置Visual Studio

找到自己安装MySQL的路径,确保有include和lib两个文件夹 在这里插入图片描述

打开创建的Visual Studio项目,切换x64平台 在这里插入图片描述

注意:如果你的项目中没有x64平台,请严格按照下面图片的步骤进行操作 a. 点击下拉框,点击配置管理器 在这里插入图片描述 b.在弹出的配置管理器页面,创建一个x64平台,并确定 在这里插入图片描述 在这里插入图片描述

c.将两个平台都切换至x64,关闭即可 在这里插入图片描述 关闭后,也许你会发现自己的项目中已经没有生成或者重写生成的功能,这问题不大,不影响正常编译运行代码!

点击项目,属性 在这里插入图片描述

依次点击 配置属性 - VC++目录 - 包含目录 - 编辑,将include路径粘贴于此

在这里插入图片描述 在这里插入图片描述

依次点击 配置属性 - VC++目录 - 库目录 - 编辑,将lib路径粘贴于此 在这里插入图片描述 在这里插入图片描述

依次点击 配置属性 - 链接器 - 输入 - 附加依赖项 - 编辑,再次输入字符串 libmysql.lib

注意,不是将libmysql.lib的路径复制到这里,是将字符串复制到这里! 在这里插入图片描述 在这里插入图片描述

将lib目录下的libmysql.lib文件复制到C:\Windows\System32目录下 在这里插入图片描述

请严格按照上面图片的步骤进行操作,否则会出现数据库连接不上的问题! 另外,如果你的项目没有x64平台,而是根据步骤2进行创建的,那么你需要在代码中加入此行代码:

#pragma comment(lib, "libmysql.lib")

以防止连接不上数据库的问题!

二、C/C++连接数据库

操纵数据库所用到的函数:

函数解析mysql_init初始化数据库句柄mysql_options设置字符编码mysql_real_connect连接数据库mysql_select_db选择数据库mysql_real_query执行sql语句,成功返回0,失败返回非0mysql_store_result获取查询的结果集mysql_fetch_row获取查询到的一行数据mysql_free_result释放结果集mysql_close关闭数据库mysql_error获取数据库当前操作失败的原因

操纵数据库所用到的变量类型:

类型解析MYSQL数据库句柄MYSQL_RES查询结果集MYSQL_ROW记录结果集结构体

当然除了这些,还有许多其他的,但是不常用,我这里列举的都是项目中比较常用的mysql函数;有兴趣的朋友可以自己去了解一下mysql的其他函数!

根据自己的项目需求提前创建好数据库和表: 例如我这里提前创建好了数据库:connect_c_cpp_text 表:student 表的字段设置如下: 在这里插入图片描述

1. 连接数据库 与 选择数据库 bool connectDB(MYSQL &mysql) { // 1.初始化数据库句柄 mysql_init(&mysql); // 2.设置字符编码 mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk"); // 3.连接数据库 // 账号 密码 数据库名 MYSQL *ret = mysql_real_connect(&mysql, "127.0.0.1", "root", "yang", "connect_c_cpp_text", 3306, NULL, 0); if (ret == NULL) { printf("数据库连接失败!失败原因:%s\n", mysql_error(&mysql)); return false; } printf("数据连接成功!\n"); // 选择数据库,成功返回0,失败返回非0 int res = mysql_select_db(&mysql, "connect_c_cpp_text"); if (res) { printf("选择数据库失败!失败原因%s\n", mysql_error(&mysql)); return false; } printf("数据库选择成功!\n"); return true; } 2. 插入表数据

根据自己的表字段进行设置sql语句,再执行即可!

bool addTableData(int id, char *name, int age, char *sex) { MYSQL mysql; // 数据库句柄 char sql[SQL_MAX]; // 存储sql语句 // 连接数据库 if (!connectDB(mysql)) { return false; } // C语言字符串组合 snprintf(sql, SQL_MAX, "INSERT INTO student VALUES(%d, '%s', %d, '%s');", id, name, age, sex); printf("插入sql语句:%s\n", sql); // 如果id字段用了auto_increment进行修饰,那么可以使用以下数据库语句: // snprintf(sql, SQL_MAX, "INSERT INTO student(name, age, sex) VALUES('%s', %d, '%s');", name, age, sex); // 执行sql语句,成功返回0 //int ret = mysql_query(&mysql, sql); int ret = mysql_real_query(&mysql, sql, (unsigned long)strlen(sql)); printf("执行插入语句,插入返回结果:%d\n", ret); if (ret) { printf("插入表数据失败!失败原因:%s\n", mysql_error(&mysql)); return false; } printf("插入表数据成功!\n"); // 关闭数据库 mysql_close(&mysql); return true; } 3. 删除表数据

根据自己的表字段进行设置sql语句,再执行即可!

bool delTableData(int id) { MYSQL mysql; // 数据库句柄 char sql[SQL_MAX]; // 存储sql语句 // 连接数据库 if (!connectDB(mysql)) { return false; } // C语言字符串组合 snprintf(sql, SQL_MAX, "DELETE FROM student WHERE id = %d;", id); printf("删除sql语句:%s\n", sql); // 执行sql语句,成功返回0 //int ret = mysql_query(&mysql, sql); int ret = mysql_real_query(&mysql, sql, (unsigned long)strlen(sql)); printf("执行删除语句,插入返回结果:%d\n", ret); if (ret) { printf("删除表数据失败!失败原因:%s\n", mysql_error(&mysql)); return false; } printf("删除表数据成功!\n"); // 关闭数据库 mysql_close(&mysql); return true; } 4. 修改表数据

根据自己的表字段进行设置sql语句,再执行即可!

bool altTableData(int id, int age) { MYSQL mysql; // 数据库句柄 char sql[SQL_MAX]; // sql语句 // 连接数据库 if (!connectDB(mysql)) { return false; } // C语言组合字符串 snprintf(sql, SQL_MAX, "UPDATE student SET age = %d WHERE id = %d;", age, id); printf("修改sql语句:%s\n", sql); // 执行sql语句,成功返回0 //int ret = mysql_query(&mysql, sql); int ret = mysql_real_query(&mysql, sql, (unsigned long)strlen(sql)); printf("执行修改语句,修改返回结果:%d\n", ret); if (ret) { printf("数据修改失败!失败原因:%s\n", mysql_error(&mysql)); return false; } printf("修改表数据成功!\n"); // 关闭数据库 mysql_close(&mysql); return true; } 5. 查询表数据

根据自己的表字段进行设置sql语句,再执行即可!

bool queTableData() { MYSQL mysql; // 数据库句柄 MYSQL_RES* res; // 查询结果集 MYSQL_ROW row; // 记录结构体 char sql[SQL_MAX]; // SQL语句 // 连接数据库 if (!connectDB(mysql)) { return false; } // C语言组合字符串 snprintf(sql, SQL_MAX, "SELECT id, name, age, sex FROM student;"); printf("查询sql语句:%s\n", sql); // 查询数据 //int ret = mysql_query(&mysql, "select * from student;"); // 等效于下面一行代码 //int ret = mysql_query(&mysql, sql); int ret = mysql_real_query(&mysql, sql, (unsigned long)strlen(sql)); printf("执行查询语句,查询返回结果:%d\n", ret); if (ret) { printf("数据查询失败!失败原因:%s\n", mysql_error(&mysql)); return false; } printf("数据查询成功!\n"); // 获取结果集 res = mysql_store_result(&mysql); // 获取查询到的一行数据 // 给row赋值,判断row是否为空,不为空就打印数据。 while (row = mysql_fetch_row(res)) { printf("%d ", atoi(row[0])); // 转换为int类型,打印id printf("%s ", row[1]); // 打印姓名 printf("%d ", atoi(row[2])); // 转换为int类型,打印年龄 printf("%s \n", row[3]); // 打印性别 } // 释放结果集 mysql_free_result(res); // 关闭数据库 mysql_close(&mysql); return true; }

全部测试代码:

#include #include // mysql文件 #define SQL_MAX 256 // sql语句字符数组最大值 // 连接数据库 static bool connectDB(MYSQL &mysql); // 插入数据 bool addTableData(int id, char *name, int age, char *sex); // 删除数据 bool delTableData(int id); // 修改数据 bool altTableData(int id, int age); // 查询数据 bool queTableData(); int main(void) { delTableData(1); addTableData(1, (char *)"小明", 20, (char *)"男"); altTableData(1, 22); queTableData(); return 0; } /***************************************************** * 功能:连接connect_c_cpp_text数据库,并选择数据库 * * 参数: * mysql - 数据库句柄 * * 返回值: * 连接成功返回true,连接失败返回false *****************************************************/ bool connectDB(MYSQL &mysql) { // 1.初始化数据库句柄 mysql_init(&mysql); // 2.设置字符编码 mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk"); // 3.连接数据库 MYSQL *ret = mysql_real_connect(&mysql, "127.0.0.1", "root", "yang", "connect_c_cpp_text", 3306, NULL, 0); if (ret == NULL) { printf("数据库连接失败!失败原因:%s\n", mysql_error(&mysql)); return false; } printf("数据连接成功!\n"); // 选择数据库 int res = mysql_select_db(&mysql, "connect_c_cpp_text"); if (res) { printf("选择数据库失败!失败原因%s\n", mysql_error(&mysql)); return false; } printf("数据库选择成功!\n"); return true; } /**************************************************** * 功能:向student表中插入一条记录 * * 参数: * id - 对应表字段id,编号 * name - 对应表字段name,姓名 * age - 对应表字段age,年龄 * sex - 对应表字段sex,性别 * * 返回值: * 插入成功返回true,插入失败返回false ****************************************************/ bool addTableData(int id, char *name, int age, char *sex) { MYSQL mysql; // 数据库句柄 char sql[SQL_MAX]; // 存储sql语句 // 连接数据库 if (!connectDB(mysql)) { return false; } // C语言字符串组合 snprintf(sql, SQL_MAX, "INSERT INTO student VALUES(%d, '%s', %d, '%s');", id, name, age, sex); printf("插入sql语句:%s\n", sql); // 如果id字段用了auto_increment进行修饰,那么可以使用以下数据库语句: // snprintf(sql, SQL_MAX, "INSERT INTO student(name, age, sex) VALUES('%s', %d, '%s');", name, age, sex); // 执行sql语句,成功返回0 //int ret = mysql_query(&mysql, sql); int ret = mysql_real_query(&mysql, sql, (unsigned long)strlen(sql)); printf("执行插入语句,插入返回结果:%d\n", ret); if (ret) { printf("插入表数据失败!失败原因:%s\n", mysql_error(&mysql)); return false; } printf("插入表数据成功!\n"); // 关闭数据库 mysql_close(&mysql); return true; } /***************************************************** * 功能:删除student表中id字段等于参数id的记录 * * 参数: * id - 对应表字段id,编号 * * 返回值: * 删除成功返回true,删除失败返回false *****************************************************/ bool delTableData(int id) { MYSQL mysql; // 数据库句柄 char sql[SQL_MAX]; // 存储sql语句 // 连接数据库 if (!connectDB(mysql)) { return false; } // C语言字符串组合 snprintf(sql, SQL_MAX, "DELETE FROM student WHERE id = %d;", id); printf("删除sql语句:%s\n", sql); // 执行sql语句,成功返回0 //int ret = mysql_query(&mysql, sql); int ret = mysql_real_query(&mysql, sql, (unsigned long)strlen(sql)); printf("执行删除语句,插入返回结果:%d\n", ret); if (ret) { printf("删除表数据失败!失败原因:%s\n", mysql_error(&mysql)); return false; } printf("删除表数据成功!\n"); // 关闭数据库 mysql_close(&mysql); return true; } /****************************************************** * 功能:根据参数id,修改对应表记录的年龄为参数age * * 参数: * id - 对应表字段id,编号 * age - 对应表字段age,年龄 * * 返回值: * 修改成功返回true,修改失败返回false *******************************************************/ bool altTableData(int id, int age) { MYSQL mysql; // 数据库句柄 char sql[SQL_MAX]; // sql语句 // 连接数据库 if (!connectDB(mysql)) { return false; } // C语言组合字符串 snprintf(sql, SQL_MAX, "UPDATE student SET age = %d WHERE id = %d;", age, id); printf("修改sql语句:%s\n", sql); //int ret = mysql_query(&mysql, sql); int ret = mysql_real_query(&mysql, sql, (unsigned long)strlen(sql)); printf("执行修改语句,修改返回结果:%d\n", ret); if (ret) { printf("数据修改失败!失败原因:%s\n", mysql_error(&mysql)); return false; } printf("修改表数据成功!\n"); // 关闭数据库 mysql_close(&mysql); return true; } /******************************************************** * 功能:查询student表中所有数据记录,并输出至控制台 * * 参数: * 无 * * 返回值: * 查询成功返回true,查询失败返回false ********************************************************/ bool queTableData() { MYSQL mysql; // 数据库句柄 MYSQL_RES* res; // 查询结果集 MYSQL_ROW row; // 记录结构体 char sql[SQL_MAX]; // SQL语句 // 连接数据库 if (!connectDB(mysql)) { return false; } // C语言组合字符串 snprintf(sql, SQL_MAX, "SELECT id, name, age, sex FROM student;"); printf("查询sql语句:%s\n", sql); // 查询数据 //int ret = mysql_query(&mysql, "select * from student;"); // 等效于下面一行代码 //int ret = mysql_query(&mysql, sql); int ret = mysql_real_query(&mysql, sql, (unsigned long)strlen(sql)); printf("执行查询语句,查询返回结果:%d\n", ret); if (ret) { printf("数据查询失败!失败原因:%s\n", mysql_error(&mysql)); return false; } printf("数据查询成功!\n"); // 获取结果集 res = mysql_store_result(&mysql); // 获取查询到的一行数据 // 给row赋值,判断row是否为空,不为空就打印数据。 while (row = mysql_fetch_row(res)) { printf("%d ", atoi(row[0])); // 转换为int类型,打印id printf("%s ", row[1]); // 打印姓名 printf("%d ", atoi(row[2])); // 转换为int类型,打印年龄 printf("%s \n", row[3]); // 打印性别 } // 释放结果集 mysql_free_result(res); // 关闭数据库 mysql_close(&mysql); return true; }

总结: 只是简单的写下了C/C++连接数据和和操纵数据库的代码,并没有对其中函数和变量进行讲解;都有注释,自己看吧,看不懂再评论提问吧!

另外,上面sql语句的关键我都使用了大写,为什么呢?就是为了区分作用,使得很好检查sql语句的语法错误!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有