C语言代码连接MySQL数据库,附Windows和linux源码
Windows 环境:
一、前提准备:
- MySQL 5.7 (64位)
- Visual Studio 2019 (其他编译器也行,使用 64 位编译,与 MySQL 位数对应即可)
二、引入文件
C语言连接数据库比较繁琐,需要引入关于连接数据库的头文件,依赖等。
问题来了:这些文件都是哪里来的呢?我哪里可以找到这些头文件,依赖。请继续往下看:
找到当时安装MySql的位置:(我的MySQL安装路径:C:\Program Files\MySQL\MySQL Server 5.7) ,会看到如下目录:
所需要的头文件和依赖就在 include 和 lib 文件夹里,复制到与项目主文件同一级目录下即可 。
include 文件夹里全部要复制,不能只复制 mysql.h, 因为mysql.h 需要依赖其它头文件。lib 文件夹里复制 libmysql.dll 和 libmysql.lib 即可。
三、测试代码编写:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*引入连接Mysql的头文件和lib包*/
#include "mysql/mysql.h"
#pragma comment(lib,"libmysql")
/*定义一些数据库连接需要的宏*/
#define HOST "localhost" /*MySql服务器地址*/
#define USERNAME "root" /*用户名*/
#define PASSWORD "123456" /*数据库连接密码*/
#define DATABASE "rank" /*需要连接的数据库*/
// 执行sql语句的函数
void exeSql(char* sql) {
MYSQL my_connection; /*数据库连接*/
int res; /*执行sql语句后的返回标志*/
MYSQL_RES* res_ptr; /*执行结果*/
MYSQL_ROW result_row; /*按行返回查询信息*/
int row, column; /* 定义行数,列数*/
mysql_init(&my_connection);
if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, CLIENT_FOUND_ROWS)) {
printf("数据库连接成功!");
/*设置查询编码为 utf8, 支持中文*/
mysql_query(&my_connection, "set names utf8");
res = mysql_query(&my_connection, sql);
if (res) {
/*现在就代表执行失败了*/
printf("Error:mysql_query !\n");
/*不要忘了关闭连接*/
mysql_close(&my_connection);
} else {
/*现在就代表执行成功了*/
/*mysql_affected_rows会返回执行sql后影响的行数*/
printf("%d 行受到影响!\n", mysql_affected_rows(&my_connection));
// 把查询结果装入 res_ptr
res_ptr = mysql_store_result(&my_connection);
// 存在则输出
if (res_ptr) {
// 获取行数,列数
row = mysql_num_rows(res_ptr);
column = mysql_num_fields(res_ptr);
// 执行输出结果,从第二行开始循环(第一行是字段名)
for (int i = 1; i < row + 1; i++) {
// 一行数据
result_row = mysql_fetch_row(res_ptr);
for (int j = 0; j < column; j++) {
printf("%s", result_row[j]);
/*不要忘了关闭连接*/
mysql_close(&my_connection);
} else {
printf("数据库连接失败!");
Linux 环境:
一、前提准备:
- MySql 5.7(64位)
-
c/c++环境(gcc)编译环境
启动 Mysql 服务:sudo service start mysql
二、测试代码编写:
「注意:」
- 如果 mysql找不到mysql.h, 可以安装 apt-get install libmysqlclient-dev ,安装完之后,重新进入mysql目录下就有相应的头文件了。
- Linux 引入mysql.h 就不要像 windows 环境下一样, 直接放在和主文件同一级目录下,而是找到 mysql.h 的位置:/usr/include/mysql/
- QQ搜索:725022484,获取200G编程资料。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*引入连接Mysql的头文件*/
#include "/usr/include/mysql/mysql.h"
/*定义一些数据库连接需要的宏*/
#define HOST "localhost" /*MySql服务器地址*/
#define USERNAME "root" /*用户名*/
#define PASSWORD "123456" /*数据库连接密码*/
#define DATABASE "rank" /*需要连接的数据库*/
// 执行sql语句的函数
void exeSql(char* sql) {
MYSQL my_connection; /*数据库连接*/
int res; /*执行sql语句后的返回标志*/
MYSQL_RES* res_ptr; /*执行结果*/
MYSQL_ROW result_row; /*按行返回查询信息*/
int row, column; /* 定义行数,列数*/
mysql_init(&my_connection);
if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, CLIENT_FOUND_ROWS)) {
printf("数据库连接成功!");
/*设置查询编码为 utf8, 支持中文*/
mysql_query(&my_connection, "set names utf8");
res = mysql_query(&my_connection, sql);
if (res) {
/*现在就代表执行失败了*/
printf("Error:mysql_query !\n");
/*不要忘了关闭连接*/
mysql_close(&my_connection);
} else {
/*现在就代表执行成功了*/
/*mysql_affected_rows会返回执行sql后影响的行数*/
printf("%d 行受到影响!\n", mysql_affected_rows(&my_connection));
// 把查询结果装入 res_ptr
res_ptr = mysql_store_result(&my_connection);
// 存在则输出
if (res_ptr) {
// 获取行数,列数
row = mysql_num_rows(res_ptr);
column = mysql_num_fields(res_ptr);
// 执行输出结果,从第二行开始循环(第一行是字段名)
for (int i = 1; i < row + 1; i++) {
// 一行数据
result_row = mysql_fetch_row(res_ptr);
for (int j = 0; j < column; j++) {
printf("%s", result_row[j]);
/*不要忘了关闭连接*/