• VC++通过API连接MySQL


    1、  首先安装MySQL数据库server,本文安装的是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、  设置server同意网络訪问,即将一个host设置为通配符%,就可以同意网络上的主机訪问这个server。

    >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";          //数据库username
        chardbpasswd[30] = "";            //password
        chardbip[30] = "192.168.1.101";   //数据库serverIP地址
        intnport = 3306;               //数据库server端口号
        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!!!
    ",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!!!
    ",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" "; } //将结果集写到EDIT中 GetDlgItem(IDC_EDIT1)->SetWindowText(str); //释放结果集 mysql_free_result(res); //关闭连接 mysql_close(con); return; }



    这是一个简单的结果界面。


    MySQL API比較多,还须要学习很多其它。

    这个文档的链接例如以下:

    http://download.csdn.net/detail/cabmail/8852297

  • 相关阅读:
    Java8 Stream
    一个轻量级的基于RateLimiter的分布式限流实现
    常用限流算法与Guava RateLimiter源码解析
    Java学习之socket网络编程篇
    Java学习之文件io流篇
    Java学习之异常篇
    Java学习之多线程篇
    Java学习之集合篇
    Java学习之常用类篇
    Java学习之final与匿名内部类篇
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6831737.html
Copyright © 2020-2023  润新知