C++操作mysql__通过mysql的c api连接mysql服务器

Stella981
• 阅读 576

C++通过mysql的c api连接mysql服务器

1、在连接之前,不要忘记打开mysql服务器哇(Navicat打开或者不打开都可以)

C++操作mysql__通过mysql的c api连接mysql服务器

2、添加包含目录

C++操作mysql__通过mysql的c api连接mysql服务器

3、添加libmysql.lib到附属依赖中

C++操作mysql__通过mysql的c api连接mysql服务器

上一步中也也可以在程序代码的开始处加上#pragma comment(lib,"D:\\Program Files\\MySQL\\MySQL Server 5.6\\lib\\libmysql.lib") 来导入libmysql.lib)

4、如果使用的mysql是64位的,还需要将项目的解决方案平台由win32改成x64

 C++操作mysql__通过mysql的c api连接mysql服务器

5、将D:\Program Files\MySQL\MySQL Server 5.6\lib(根据具体路径而定)下的libmysql.dll复制到项目中去,和.cpp,.h文件位于同一路径下

 实例代码:

C++操作mysql__通过mysql的c api连接mysql服务器 C++操作mysql__通过mysql的c api连接mysql服务器

 1 #include <stdio.h>
 2 #include <mysql.h> // 如果配置ok就可以直接包含这个文件
 3 int main(void)
 4 {
 5     MYSQL mysql;    //一个数据库结构体
 6     MYSQL_RES* res; //一个结果集结构体
 7     MYSQL_ROW row;  //char** 二维数组,存放一条条记录
 8                     
 9     mysql_init(&mysql);//初始化数据库
10     //设置编码方式
11     mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");
12     //连接数据库
13     //判断如果连接失败就输出连接失败。
14     if (mysql_real_connect(&mysql, "localhost", "root", "123456", "mysql", 3306, NULL, 0) == NULL)  //mysql是一个数据库
15         printf("连接失败!\\n");
16     //查询数据
17     mysql_query(&mysql, "select * from db");  //db是数据库下的一个表
18     //获取结果集
19     res = mysql_store_result(&mysql);
20 
21     //给ROW赋值,判断ROW是否为空,不为空就打印数据。
22     while (row = mysql_fetch_row(res))
23     {
24         printf("%s  ", row[0]);//打印ID      打印第一列
25         printf("%s  ", row[1]);//打印姓名    打印第二列
26         printf("%s  ", row[2]);//            打印第三列
27         printf("%s  ", row[3]);
28         printf("%s  ", row[4]);
29         printf("%s  ", row[5]);
30         printf("%s  \n", row[6]);
31     }
32     //释放结果集
33     mysql_free_result(res);
34     //关闭数据库
35     mysql_close(&mysql);
36     //停留等待
37     system("pause");
38     return 0;
39 }

View Code

C++操作mysql__通过mysql的c api连接mysql服务器

Navicat中的信息:

C++操作mysql__通过mysql的c api连接mysql服务器

C++通过mysql的c api连接mysql服务器,并对数据库中的内容进行增删修改操作

在上面操作的基础上,修改代码如下:

C++操作mysql__通过mysql的c api连接mysql服务器 C++操作mysql__通过mysql的c api连接mysql服务器

  1 #include <stdio.h>
  2 #include <WinSock.h>  //一定要包含这个,或者winsock2.h
  3 //#include "include/mysql.h"    //引入mysql头文件(一种方式是在vc目录里面设置,一种是文件夹拷到工程目录,然后这样包含)
  4 #include "mysql.h"  
  5 #include <Windows.h>
  6 
  7 //包含附加依赖项,也可以在工程--属性里面设置
  8 #pragma comment(lib,"wsock32.lib")
  9 #pragma comment(lib,"libmysql.lib")
 10 MYSQL mysql; //mysql连接
 11 MYSQL_FIELD *fd;  //字段行数组
 12 char field[32][32];  //存字段名二维数组
 13 MYSQL_RES *res; //这个结构代表返回行的一个查询结果集
 14 MYSQL_ROW column; //一个行数据的类型安全(type-safe)的表示,表示数据行的列
 15 char query[150]; //存放mysql查询语句
 16 
 17 bool ConnectDatabase();     //函数声明
 18 void FreeConnect();
 19 bool QueryDatabase1();  //查询1
 20 bool QueryDatabase2();  //查询2
 21 bool InsertData();
 22 bool ModifyData();
 23 bool DeleteData();
 24 
 25 int main(int argc, char **argv)
 26 {
 27     ConnectDatabase();
 28     QueryDatabase1();
 29     InsertData();
 30     QueryDatabase2();
 31     ModifyData();
 32     QueryDatabase2();
 33     DeleteData();
 34     QueryDatabase2();
 35     FreeConnect();
 36     system("pause");
 37     return 0;
 38 }
 39 //连接数据库
 40 bool ConnectDatabase()
 41 {
 42     //初始化mysql
 43     mysql_init(&mysql);  //连接mysql,数据库
 44 
 45     //返回false则连接失败,返回true则连接成功
 46     if (!(mysql_real_connect(&mysql, "localhost", "root", "123456", "test", 0, NULL, 0))) //中间分别是主机,用户名,密码,数据库名,端口号(可以写默认0或者3306等),可以先写成参数再传进去
 47     {
 48         printf("Error connecting to database:%s\n", mysql_error(&mysql));
 49         return false;
 50     }
 51     else
 52     {
 53         printf("Connected...\n");
 54         return true;
 55     }
 56 }
 57 //释放资源
 58 void FreeConnect()
 59 {
 60     //释放资源
 61     mysql_free_result(res);
 62     mysql_close(&mysql);
 63 }
 64 /***************************数据库操作***********************************/
 65 //其实所有的数据库操作都是先写个sql语句,然后用mysql_query(&mysql,query)来完成,包括创建数据库或表,增删改查
 66 //查询数据
 67 //int sprintf(char* str,const char* format,...) 发送格式化输出到str所指向的字符串
 68 bool QueryDatabase1()
 69 {
 70     sprintf(query, "select * from user"); //执行查询语句,这里是查询所有,user是表名,不用加引号,用strcpy也可以
 71     mysql_query(&mysql, "set names gbk"); //设置编码格式(SET NAMES GBK也行),否则cmd下中文乱码
 72     //返回0 查询成功,返回1查询失败
 73     if (mysql_query(&mysql, query))        //执行SQL语句
 74     {
 75         printf("Query failed (%s)\n", mysql_error(&mysql));
 76         return false;
 77     }
 78     else
 79     {
 80         printf("query success\n");
 81     }
 82     //获取结果集
 83     if (!(res = mysql_store_result(&mysql)))    //获得sql语句结束后返回的结果集
 84     {
 85         printf("Couldn't get result from %s\n", mysql_error(&mysql));
 86         return false;
 87     }
 88 
 89     //打印数据行数
 90     printf("number of dataline returned: %lld\n", mysql_affected_rows(&mysql));  //此处原本是%d但是会报错,根据原因改成了%lld,lld表示长整形
 91 
 92     //获取字段的信息
 93     char *str_field[32];  //定义一个字符串数组存储字段信息
 94     for (int i = 0; i < 4; i++)   //在已知字段数量的情况下获取字段名
 95     {
 96         str_field[i] = mysql_fetch_field(res)->name;
 97     }
 98     for (int i = 0; i < 4; i++)   //打印字段
 99         printf("%10s\t", str_field[i]);  //此处有个制表符\t
100     printf("\n");
101     //打印获取的数据
102     while (column = mysql_fetch_row(res))   //在已知字段数量情况下,获取并打印下一行
103     {
104         printf("%10s\t%10s\t%10s\t%10s\n", column[0], column[1], column[2], column[3]);  //column是列数组 每一个数据后面都有一个制表符,cout是没有制表符的吧
105     }
106     return true;
107 }
108 bool QueryDatabase2()
109 {
110     mysql_query(&mysql, "set names gbk");
111     //返回0 查询成功,返回1查询失败
112     if (mysql_query(&mysql, "select * from user"))        //执行SQL语句
113     {
114         printf("Query failed (%s)\n", mysql_error(&mysql));
115         return false;
116     }
117     else
118     {
119         printf("query success\n");
120     }
121     res = mysql_store_result(&mysql);
122     //打印数据行数
123     printf("number of dataline returned: %lld\n", mysql_affected_rows(&mysql));
124     for (int i = 0; fd = mysql_fetch_field(res); i++)  //获取字段名
125         strcpy(field[i], fd->name);
126     int j = mysql_num_fields(res);  // 获取列数
127     for (int i = 0; i < j; i++)  //打印字段
128         printf("%10s\t", field[i]);
129     printf("\n");
130     while (column = mysql_fetch_row(res))
131     {
132         for (int i = 0; i < j; i++)
133             printf("%10s\t", column[i]);
134         printf("\n");
135     }
136     return true;
137 }
138 //插入数据
139 bool InsertData()
140 {
141     sprintf(query, "insert into user values (6, 'Lilei', '123','lilei23@sina.cn');");  //可以想办法实现手动在控制台手动输入指令
142     if (mysql_query(&mysql, query))        //执行SQL语句
143     {
144         printf("Query failed (%s)\n", mysql_error(&mysql));  //可以检查输入的信息是否有错误,比如输入的类型和字段的类型是否匹配
145         return false;
146     }
147     else
148     {
149         printf("Insert success\n");
150         return true;
151     }
152 }
153 //修改数据
154 bool ModifyData()
155 {
156     sprintf(query, "update user set email='lilei325@163.com' where name='Lilei'");
157     if (mysql_query(&mysql, query))        //执行SQL语句
158     {
159         printf("Query failed (%s)\n", mysql_error(&mysql));
160         return false;
161     }
162     else
163     {
164         printf("Modify success\n");
165         return true;
166     }
167 }
168 //删除数据
169 bool DeleteData()
170 {
171     /*sprintf(query, "delete from user where id=6");*/
172     char query[100];
173     printf("please input the sql:\n");
174     gets_s(query);  //这里手动输入sql语句
175     if (mysql_query(&mysql, query))        //执行SQL语句
176     {
177         printf("Query failed (%s)\n", mysql_error(&mysql));
178         return false;
179     }
180     else
181     {
182         printf("Delete success\n");
183         return true;
184     }
185 }

C++对数据库中的数据做增删修改操作

执行结果:

C++操作mysql__通过mysql的c api连接mysql服务器

 参考博客:https://www.cnblogs.com/47088845/p/5706496.html#top

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
mysql用户
1\.学会能按着需求创建一个帐号2\.知道连接字符串是什么样3\.密码密码怎么恢复mysql用户权限介绍mysql用户管理 !(https://oscimg.oschina.net/oscnet/368d3c1e00a0a9515545c2962660a27a080.png)!(https://oscimg.oschin
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这