PS:二者连接的过程主要参考这篇博客园文章,http://www.cnblogs.com/justinzhang/archive/2011/09/23/2185963.html
这篇博客园的文章中的代码已经被我改好,附到下面去了!
1.在C++和mysql连接编译遇到的第一个问题:
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 中被引用
解决方案:
这篇博客也阐述了.lib和.dll的区别,主要是VS2010 win32平台和Mysql的64位平台不兼容的问题。
http://blog.****.net/tspangle/article/details/43539721
2.无法启动该程序,因为计算机中缺少libmysql.dll
解决方案:
需把libmysql.dll放到项目bin\Debug文件夹中 3.Unable to connect the database,check your configuration!
主要原因是对mysql_real_connet的参数传递错误
该函数原型是:
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long clientflag);
其中我的数据库的user="root",password="",哈哈,填写自己的就好啦,
db是建立的数据库的名字,我在mysql的命令窗口自己建立了一个mytest的数据库,路径为C:\ProgramData\MySQL\MySQL Server 5.7\Data
所以db="mytest"
其他的按照常规设置就好了,这几个是比较个性化的设置。
如果连接数据库的过程中出错了,可以查看C:\ProgramData\MySQL\MySQL Server 5.7\Data文件夹下的.err错误日志来查看错误原因,并且可以对症下药!
#include <windows.h>
#include "stdio.h"
#include "winsock.h"
#include "mysql.h"
#pragma comment (lib, "libmysql.lib")
#pragma comment (lib, "mysqlclient.lib")
int main()
{ MYSQL * con; //= mysql_init((MYSQL*) 0);
MYSQL_RES *res;
MYSQL_ROW row;
char tmp[];
//database configuartion
char dbuser[]="root";
char dbpasswd[]=""; // it must be changed
char dbip[]="localhost";
char dbname[]="mytest";
char tablename[]="tab";
char *query=NULL; int x;
int y;
int rt;//return value
unsigned int t; int count = ; printf("input x,y\n");
scanf("%d,%d",&x,&y);
fflush(stdin);
printf("input over\n"); con = mysql_init((MYSQL*) );
//con = mysql_init(&mysql); if ( con !=NULL && mysql_real_connect(con,dbip,dbuser,dbpasswd,dbname,,NULL,) )
{
if (!mysql_select_db(con,dbname))
{
printf("Select successfully the database!\n");
con ->reconnect = ;
query = "set names \'GBK\'";
rt=mysql_real_query(con,query,strlen(query));
if (rt)
{
printf("Error making query: %s !!!\n",mysql_error(con));
}
else
{
printf("query %s succeed!\n",query);
}
}
}
else
{
MessageBoxA(NULL,"Unable to connect the database,check your configuration!","",NULL);
} sprintf(tmp,"insert into %s values(%s,%d,%d)",tablename,"null",x,y); //注意如何向具有自增字段的数据库中插入记录 rt=mysql_real_query(con,tmp,strlen(tmp));
if (rt)
{
printf("Error making query: %s !!!\n",mysql_error(con));
}
else
{
printf("%s executed!!!\n",tmp);
} sprintf(tmp,"select * from %s",tablename);
rt=mysql_real_query(con,tmp,strlen(tmp));
if (rt)
{
printf("Error making query: %s !!!\n",mysql_error(con));
}
else
{
printf("%s executed!!!\n",tmp);
}
res = mysql_store_result(con);//将结果保存在res结构体中 while(row = mysql_fetch_row(res))
{
for(t=;t<mysql_num_fields(res);t++)
{
printf("%s ",row[t]);
}
printf(".............\n");
count ++;
} printf("number of rows %d\n",count);
printf("mysql_free_result...\n");
mysql_free_result(res);
mysql_close(con);
return ;
}