VC++通过API连接MySQL
2015-06-29 23:25
531 查看
1、 首先安装MySQL数据库服务器,本文安装的是mysql-installer-community-5.6.10.1.msi这个版本,至于各个版本有什么不同,不在这里说明。
如下的默认安装的安装目录结构截图:
![](http://img.blog.csdn.net/20150629231148913?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2FibWFpbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2、 接着配置环境变量,这个纯粹是要为了在命令行下使用mysql的相关命令更加方便。如
如下设置即可,有些安装包已经自动给添加上了这个路径,只需要检查一下即可。
![](http://img.blog.csdn.net/20150629231207793?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2FibWFpbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3、 先在命令行下创建一个数据samp_db,并在创建表students。建库和建表都相对简单,如下截图是已经建好的。
创建数据库命令如下:
>createdatabase samp_db character set gbk;
使用数据库samp_db
>usesamp_db;
创建数据表
>createtable students
(
id int unsigned not null auto_increment primary key,
name char(8) not null,
sex char(4) not null,
age tinyint unsigned not null,
tel char(13) null default "-",
address char(60),
modifyDateTime char(30)
);
![](http://img.blog.csdn.net/20150629231243143?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2FibWFpbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4、 设置服务器允许网络访问,即将一个host设置为通配符%,即可允许网络上的主机访问这个服务器。
>use mysql;
>select 'host' from user whereuser='root';
>update user set host = '%' where user ='root';
>flush privileges;
![](http://img.blog.csdn.net/20150629231121262?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2FibWFpbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
5、 使用MySQL API访问数据库,即分为初始化,连接,设置,操作。
添加头文件
#include "mysql.h"
在程序依赖附加项中添加库。
libmysql.lib
具体实现代码如下:
这是一个简单的结果界面。
![](http://img.blog.csdn.net/20150629231417637?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2FibWFpbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
MySQL API比较多,还需要学习更多。
这个文档的链接如下:
http://download.csdn.net/detail/cabmail/8852297
如下的默认安装的安装目录结构截图:
2、 接着配置环境变量,这个纯粹是要为了在命令行下使用mysql的相关命令更加方便。如
如下设置即可,有些安装包已经自动给添加上了这个路径,只需要检查一下即可。
3、 先在命令行下创建一个数据samp_db,并在创建表students。建库和建表都相对简单,如下截图是已经建好的。
创建数据库命令如下:
>createdatabase samp_db character set gbk;
使用数据库samp_db
>usesamp_db;
创建数据表
>createtable students
(
id int unsigned not null auto_increment primary key,
name char(8) not null,
sex char(4) not null,
age tinyint unsigned not null,
tel char(13) null default "-",
address char(60),
modifyDateTime char(30)
);
4、 设置服务器允许网络访问,即将一个host设置为通配符%,即可允许网络上的主机访问这个服务器。
>use mysql;
>select 'host' from user whereuser='root';
>update user set host = '%' where user ='root';
>flush privileges;
5、 使用MySQL API访问数据库,即分为初始化,连接,设置,操作。
添加头文件
#include "mysql.h"
在程序依赖附加项中添加库。
libmysql.lib
具体实现代码如下:
void CTestMysqlUseAPIDlg::OnBnClickedOk() { //TODO: 在此添加控件通知处理程序代码 MYSQL*con; MYSQL_RES*res; MYSQL_ROWrow; //数据库配置 chartmp[400]; chardbuser[30] = "root"; //数据库用户名 chardbpasswd[30] = ""; //密码 chardbip[30] = "192.168.1.101"; //数据库服务器IP地址 intnport = 3306; //数据库服务器端口号 chardbname[30] = "samp_db"; //数据库名 chartablename[30] = "students"; //表名 char*query = NULL; unsignedint t; intcount = 0; intrt;//return value //1、将初始化MYSQL对象 con= mysql_init((MYSQL*)0); //2、连接数据库 相当在在window命令行下执行 mysql -h 192.168.1.101 -u root if(con != NULL&& mysql_real_connect(con,dbip,dbuser,dbpasswd,dbname,nport,NULL,0)) { //3、选择数据库相当于执行mysql>use samp_db if(!mysql_select_db(con,dbname)) { con->reconnect = 1; //3、用于设定字符集的,主要针对保存到数据库中的中文 query= "set names \'GBK\'"; rt=mysql_real_query(con,query,strlen(query)); if(rt) { printf("Error making query: %s!!!\n",mysql_error(con)); } //4、设定返回字符集,这是必须要设置的,不然返回的是其它的字符集,显示时全是乱码。 query= "SET CHARACTER_SET_RESULTS=\'UTF8\'"; rt=mysql_real_query(con,query,strlen(query)); if(rt) { printf("Error making query: %s!!!\n",mysql_error(con)); } } } else { MessageBoxA(NULL,"连接数据库失败,请检查配置!","",NULL); return; } //insert操作 chartimeBuff[32] = {0}; charbuff[256] = {0}; SYSTEMTIMEst; GetLocalTime(&st); sprintf(timeBuff,"%04d-%02d-%02d%02d:%02d:%02d",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond); sprintf(buff,"insert intostudentsvalues(NULL,\"%s\",\"%s\",%d,\"%s\",\"%s\",\"%s\");","牛小北","女",28,"135321432","长沙市",timeBuff); rt= mysql_real_query(con,buff,strlen(buff)); if(rt) { CStringsError; sError.Format(L"%s",mysql_error(con)); charbuff[128] = {0}; WideCharToMultiByte(CP_ACP,0,sError,-1,buff,127,NULL,FALSE); MessageBox(L"inserterror.!" + sError,L"",NULL); return; } //select操作 sprintf(tmp,"select *from %s where id>260;",tablename); rt= mysql_real_query(con,tmp,strlen(tmp)); if(rt) { MessageBoxA(NULL,"selecterror.!","",NULL); return; } //对结果集做处理 res= mysql_store_result(con); CStringstr; while(row = mysql_fetch_row(res)) { for(t = 0;t< mysql_num_fields(res); t++) { wchar_tTmpBuf[128] = {0}; MultiByteToWideChar(CP_UTF8,0,row[t],-1,TmpBuf,127); charbuff[127]; WideCharToMultiByte(CP_ACP,0,TmpBuf,-1,buff,127,NULL,FALSE); str+= L""+CString(buff); } str+= L"\r\n"; } //将结果集写到EDIT中 GetDlgItem(IDC_EDIT1)->SetWindowText(str); //释放结果集 mysql_free_result(res); //关闭连接 mysql_close(con); return; }
这是一个简单的结果界面。
MySQL API比较多,还需要学习更多。
这个文档的链接如下:
http://download.csdn.net/detail/cabmail/8852297
相关文章推荐
- 黑马程序员-OC语言-类方法(听课笔记)
- LeetCode-Kth Largest Element in an Array-解题报告
- c语言“贪吃蛇”
- C++基础知识 --- GDB使用指南
- 【读书笔记:C++ primer plus 第六版 中文版】第12章 类和动态内存分配
- LeetCode-The Skyline Problem-解题报告
- C++模板学习
- [VC++]_[初级]_[使用zlib标准库解压zip文件]
- LeetCode-Maximal Square-解题报告
- 【读书笔记:C++ primer plus 第六版 中文版】第11章 使用类
- 深入理解C/C++混合编程
- LeetCode-Rectangle Area 解题报告
- C++之类成员变量初始化
- LeetCode-Basic Calculator-解题报告
- 【c++】指针参数是如何传递内存的
- C语言字符串
- call Kernelized Correlation Filters Tracker(Matab) in Qt(c++)
- c语言结构体指针初始化
- 【学习笔记】【C语言】枚举
- 【c语言】判断一个数是奇偶数