VS2012环境下C++连接mysql数据库

来源:互联网 发布:知乎 怎么忘记暗恋的人 编辑:程序博客网 时间:2024/06/09 16:45

工具:vs2012,mysql5.0

操作系统:win64位

首先打开vs2012新建一个c++工程(空工程就好,自己在源文件中添加一个cpp文件,用于写连接的代码),如下图所示:

 

设置一些引用文件的环境变量,点击项目->属性->vc++目录
然后“include目录”(包含目录)那把“C:\ProgramFiles\MySQL\MySQL Server 5.5\include”给加进来 
再然后“lib目录”(库目录)那里把“C:\ProgramFiles\MySQL\MySQL Server 5.0\lib”和“C:\ProgramFiles\MySQL\MySQL Server 5.0\lib\debug”也一起加进来。以上三个文件在mysql 的安装目录下(默认在C:\ProgramFiles,或有不同

解释一下以上三个文件的作用:

在访问数据库时要调用mysql的头文件,在其安装目录的include文件夹里;

在编译和连接时:(转)lib是编译时需要的,dll是运行时需要的。 如果要完成源代码的编译,有lib就够了。 如果也使动态连接的程序运行起来,有dll就够    了。 在开发和调试阶段,当然最好都有。 一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll     文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那    么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺    点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。 
1. 编译是通过静态链接库(lib)去找到接口的。
2. #pragma comment (lib, "libmysql.lib")
    #pragma comment (lib, "mysqlclient.lib")


基本上做完以后的工作就可以连接mysql数据库了!

测试代码如下:

#include <stdio.h>#include <string.h>#include <algorithm>#include <iostream>#include "winsock.h"#include "mysql.h"using namespace std;#pragma comment (lib, "libmysql.lib")#pragma comment (lib, "mysqlclient.lib")int main(){//connectionparams    char *host = "localhost";    char *user = "root";//mysql的用户名    char *pass = "123456";//你的mysql服务器密码    char *db = "MySql";    unsigned int port = 3306; //server port    MYSQL *sock;    sock=mysql_init(0);    if(sock &&mysql_real_connect(sock,host,user,pass,db,0,NULL,0))    {        cout<<"connect mysqlsucceed!"<<endl;}else{    cout<<"I'm sorry to tell you that you wrong!"<<endl;}getchar();    //input 1 or 2 or 3    return 0;}

如果是32位操作系统以上步骤就足够了。我的电脑是64位,vs2012和mysql都是64位的,因此要修改一下项目的默认设置,否则会出现:

error LNK2019: 无法解析的外部符号 _mysql_real_connect@32,该符号在函数 _main 中被引用
error LNK2019: 无法解析的外部符号 _mysql_query@8,该符号在函数 _main 中被引用
error LNK2019: 无法解析的外部符号 _mysql_init@4,该符号在函数 _main 中被引用
error LNK2019: 无法解析的外部符号 _mysql_close@4,该符号在函数 _main 中被引用

等无法解析外部符号的错误。

点击项目->属性->配置管理器

活动解决方案平台,下拉选新建,出现一个新的对号框,在键入选择新平台中选择X64


然后重新编译就OK了


参考:http://blog.csdn.net/w174504744/article/details/7884997


3 0