Heim  >  Artikel  >  Datenbank  >  C++中使用MySQL_MySQL

C++中使用MySQL_MySQL

WBOY
WBOYOriginal
2016-06-01 13:01:081585Durchsuche

我的电脑上的软件如下:

VS2012

MySQL 5.6

操作系统是64位win8.1

1.前提

下载并安装MySQL

2.配置

(1)在项目中 属性》C++》常规》添加附加包含目录:MY_SQL的目录/include

(2)在项目中 属性》连接器》常规》添加附加库目录:MY_SQL的目录/lib

(3)在项目中 属性》连接器》输入》添加附加依赖项:libmysql.lib

3.注意事项

如果已经按上述配置好但是还是编译不通过,提示:

1> 正在生成代码...

1>BaseDB.obj : error LNK2019: 无法解析的外部符号 _mysql_init@4,该符号在函数 "public: bool __thiscall BaseDB::openConnect(void)" (?openConnect@BaseDB@@QAE_NXZ) 中被引用 1>BaseDB.obj : error LNK2019: 无法解析的外部符号 _mysql_real_connect@32,该符号在函数 "public: bool __thiscall BaseDB::openConnect(void)" (?openConnect@BaseDB@@QAE_NXZ) 中被引用 1>BaseDB.obj : error LNK2019: 无法解析的外部符号 _mysql_query@8,该符号在函数 "public: struct st_mysql_res * __thiscall BaseDB::doQuery(class std::basic_string,class std::allocator > const &)" (?doQuery@BaseDB@@QAEPAUst_mysql_res@@ABV?$basic_string@DU?$char_traits@D@V?$allocator@D@@Z) 中被引用 1>BaseDB.obj : error LNK2019: 无法解析的外部符号 _mysql_store_result@4,该符号在函数 "public: struct st_mysql_res * __thiscall BaseDB::doQuery(class std::basic_string,class std::allocator > const &)" (?doQuery@BaseDB@@QAEPAUst_mysql_res@@ABV?$basic_string@DU?$char_traits@D@V?$allocator@D@@Z) 中被引用 1>BaseDB.obj : error LNK2019: 无法解析的外部符号 _mysql_close@4,该符号在函数 "public: void __thiscall BaseDB::closeConnect(void)" (?closeConnect@BaseDB@@QAEXXZ) 中被引用 1>DBUtil.obj : error LNK2019: 无法解析的外部符号 _mysql_free_result@4,该符号在函数 "public: static bool __cdecl DBUtil::checkUserLogin(class std::basic_string,class std::allocator > const &,class std::basic_string,class std::allocator > const &)" (?checkUserLogin@DBUtil@@SA_NABV?$basic_string@DU?$char_traits@D@V?$allocator@DZ) 中被引用 1>E:/Flighting/MySQLtest/ConsoleApplication1/Debug/ConsoleApplication1.exe : fatal error LNK1120: 6 个无法解析的外部命令 1>

1>生成失败。

这个问题的产生原因是:你装的MySQL64位的,而VS2012默认的运行平台是32位的所以不支持

解决办法有两个:(1)项目属性》右上角有一个配置管理器》把你的项目的运行平台改为X64(如果没有就新建一个)

(2)如果项目中已经引入了其他32位的附加库,贸然修改成64位会导致原来的库编译不通过,这样没办法只好上网搜一个mysql32为的lib和dll

最后,如果运行时提示找不到libmysql.dll 就把libmysql,dll复制到System32/SysWow64 吧

代码实例:

 

#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql.h> 
#include <iostream>
using namespace std;

int main()
{
    const char user[] = "root";         //username
    const char pswd[] = "root";         //password
    const char host[] = "localhost";    //or"127.0.0.1"
    const char table[] = "test";        //database
    unsigned int port = 3306;           //server port        
    MYSQL myCont;
    MYSQL_RES *result;
    MYSQL_ROW sql_row;
    MYSQL_FIELD *fd;
    char column[32][32];
    int res;
    mysql_init(&myCont);
    if(mysql_real_connect(&myCont,host,user,pswd,table,port,NULL,0))
    {
        cout<<"connect succeed!"<<endl;
        mysql_query(&myCont, "SET NAMES GBK"); //设置编码格式,否则在cmd下无法显示中文
        res=mysql_query(&myCont,"select * from samples");//查询
        if(!res)
        {
            result=mysql_store_result(&myCont);//保存查询到的数据到result
            if(result)
            {
                int i,j;
                cout<<"number of result: "<<(unsigned long)mysql_num_rows(result)<<endl;
                for(i=0;fd=mysql_fetch_field(result);i++)//获取列名
                {
                    strcpy(column[i],fd->name);
                }
                j=mysql_num_fields(result);
                for(i=0;i<j;i++)
                {
                    printf("%s\t",column[i]);
                }
                printf("\n");
                while(sql_row=mysql_fetch_row(result))//获取具体的数据
                {
                    for(i=0;i<j;i++)
                    {
                        printf("%s\n",sql_row[i]);
                    }
                    printf("\n");
                }
            }
        }
        else
        {
            cout<<"query sql failed!"<<endl;
        }
    }
    else
    {
        cout<<"connect failed!"<<endl;
    }
    if(result!=NULL) mysql_free_result(result);//释放结果资源
    mysql_close(&myCont);//断开连接
    return 0;
}


 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn