VC++通过API连接MySQL

1、  首先安装MySQL数据库服务器,本文安装的是mysql-installer-community-5.6.10.1.msi这个版本,至于各个版本有什么不同,不在这里说明。

如下的默认安装的安装目录结构截图:


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值