VC连接MySql
VC连接MySql
一丶MySql 需要了解的知识
VC连接MySql 需要了解几个关键的API:
MYSQL * stdcall mysql init (MYSQL *mysql): 初始化一个数据库.如果传NULL.则返回一个数据库对象
mysql_real connect(); 与MySql 数据库创建连接
mySql_close() 关闭连接释放对象.如果自动分配的.也就是init传的NULL. 则自动释放.
mysql_select_db 选择一个数据库. 相当于sql语句 use database 数据库名
mysql_ query sql查询.
mysql_store_resul 如果调用来的sql查询.那么必须调用它.保存查询结果.并且返回这个数据库的结果集.
mysql_set_ character 等价于 set names 设置编码格式.
mysql _freeresult 释放结果集使用的内存.
二丶VS2015 配置库目录以及包含目录.使用MySql
1.要包含mysql的include目录.以及lib下的opt目录.
2.包含头文件 mysql.h 以及使用库 #pragma comment(lib,"libmysql.lib")
首先我们VS2015 打开项目属性.点击我们的VC++目录设置我们的包含目录以及库目录.
mysql是你安装的目录.include以及lib都在他的目录下. 你可以使用Everything 搜索一下Mysql 看看你的mysql放哪里了.
例如:
C:\Program Files (x86)\MySQL\MySQL Server 5.0\include\ 我的是在C盘.
c:xxxx\MySQL\mySql Server 5.0\lib\opt; 库目录
下图为设置.
包含我们的头文件
#include "mysql.h"
#pragma comment(lib,"libmysql.lib")
如果编译出错.可能会显示socket的字样.那是因为mysql用了socket
我们还需要加载一个头文件.
#include <winsock2.h>
三丶数据库连接代码示例
我们可以下载一个MySql 手册. 可以查看 API 跟库.
我们常见的属性也列举出来了.
1.初始化跟连接数据库的代码
// 1.初始化MySql MYSQL *pMySql; pMySql = mysql_init(NULL); //因为我们不是new的自动创创建 if (NULL == pMySql) { AfxMessageBox(TEXT("数据库连接失败")); return; } //2.与我们的数据库创建连接 /* 1.我们的MySql指针 2.我们数据库的IP地址 3.数据库用户名 4.数据库的用户密码. 5.db 为数据库名称 6.端口 7.linux下的.给NULL 8.协议 使用Show processlist; 可以查看数据库当前连接 */ if (!mysql_real_connect(pMySql, LOCAL_HOST, "root", "123456", NULL, 3306, NULL, NULL)) { AfxMessageBox(TEXT("数据库连接失败")); return; }
调用mysql_real_connect 的时候.给定属性即可.
我们可以看下我们当前的连接 使用 show processlist;
可以看到.ID 为6的使我们的连接. 只不过数据库名字我们没有选中.我们可以设置选中
2.设置我们的数据库.
//3.设置我们的数据库 /* 1.我们的sql句柄 2.我们要选择的数据库的名称 use daatabse 数据库名 */ mysql_select_db(pMySql, "newtest");
这样我们就会使用newtest这个数据库了.
三丶数据库的查询.获取结果集.提取结果集
这里总共分三步.
1.我们使用sql 语句查询结果.
2.查询完毕之后.我们还需要使用api.来接受这个结果.
3.结果里面很多东西.所以我们还要使用API 进行进一步的提取.
//4.查询.返回结果集. 提取结果集 /* 1.sql 句柄 2.查询语句 */ if (!mysql_query(pMySql, "select *from stu")) { AfxMessageBox(TEXT("数据库查询失败")); return; } //获取结果集 MYSQL_RES pres; //结果集结构体 pres = mysql_store_result(pMySql); if (NULL ==pres) { AfxMessageBox(TEXT("获取结果集失败")); return; } //提取结构 MYSQL_FIELD *fd; //使用API获取,循环获取.不断获取.直到为0 遍历字段名 for (size_t i = 0; fd = mysql_fetch_field(pres); i++) { printf("%s", fd->name);//打印出字段名 } //遍历字段中的数据. // 结果集中有一个 rowcount 表示多少行数据.所以遍历 MYSQL_ROW row; CString str; while (row = mysql_fetch_row(pres)); { //输出我们的字段 str = ""; str.Format(TEXT("字段1 %s 字段2 %s 字段3 %s"), row[0], row[1], row[2]); AfxMessageBox(str); }
最后我们要关闭结果集.以及数据库连接
mysql_close();
mysql_free_result();
如果我们查询乱码.那么还需要设置我们的结果集.
mysql_set_character_set(数据库句柄,"gbk");
4.创建数据库
mysql_create_db():
具体函数可以查询参考手册
坚持两字,简单,轻便,但是真正的执行起来确实需要很长很长时间.当你把坚持两字当做你要走的路,那么你总会成功. 想学习,有问题请加群.群号:725864912(收费)群名称: 逆向学习小分队 群里有大量学习资源. 以及定期直播答疑.有一个良好的学习氛围. 涉及到外挂反外挂病毒 司法取证加解密 驱动过保护 VT 等技术,期待你的进入。
详情请点击链接查看置顶博客 https://www.cnblogs.com/iBinary/p/7572603.html
本文来自博客园,作者:iBinary,未经允许禁止转载 转载前可联系本人.对于爬虫人员来说如果发现保留起诉权力.https://www.cnblogs.com/iBinary/p/9669096.html
欢迎大家关注我的微信公众号.不定期的更新文章.更新技术. 关注公众号后请大家养成 不白嫖的习惯.欢迎大家赞赏. 也希望在看完公众号文章之后 不忘 点击 收藏 转发 以及点击在看功能.![微信公众号](https://images.cnblogs.com/cnblogs_com/iBinary/1827080/o_220306121308_qrcode_for_gh_b8b8f84e4988_258.jpg)
![QQ群](https://images.cnblogs.com/cnblogs_com/iBinary/1827080/o_21062107294320210621152919.png)