mysql和VS2010 C++链接过程中出现的问题
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.csdn.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错误日志来查看错误原因,并且可以对症下药!
1 #include <windows.h> 2 #include "stdio.h" 3 #include "winsock.h" 4 #include "mysql.h" 5 #pragma comment (lib, "libmysql.lib") 6 #pragma comment (lib, "mysqlclient.lib") 7 int main() 8 { 9 10 MYSQL * con; //= mysql_init((MYSQL*) 0); 11 MYSQL_RES *res; 12 MYSQL_ROW row; 13 char tmp[400]; 14 //database configuartion 15 char dbuser[30]="root"; 16 char dbpasswd[30]="123456"; // it must be changed 17 char dbip[30]="localhost"; 18 char dbname[50]="mytest"; 19 char tablename[50]="tab"; 20 char *query=NULL; 21 22 int x; 23 int y; 24 int rt;//return value 25 unsigned int t; 26 27 int count = 0; 28 29 printf("input x,y\n"); 30 scanf("%d,%d",&x,&y); 31 fflush(stdin); 32 printf("input over\n"); 33 34 35 con = mysql_init((MYSQL*) 0); 36 //con = mysql_init(&mysql); 37 38 39 if ( con !=NULL && mysql_real_connect(con,dbip,dbuser,dbpasswd,dbname,3306,NULL,0) ) 40 { 41 if (!mysql_select_db(con,dbname)) 42 { 43 printf("Select successfully the database!\n"); 44 con ->reconnect = 1; 45 query = "set names \'GBK\'"; 46 rt=mysql_real_query(con,query,strlen(query)); 47 if (rt) 48 { 49 printf("Error making query: %s !!!\n",mysql_error(con)); 50 } 51 else 52 { 53 printf("query %s succeed!\n",query); 54 } 55 } 56 } 57 else 58 { 59 MessageBoxA(NULL,"Unable to connect the database,check your configuration!","",NULL); 60 } 61 62 sprintf(tmp,"insert into %s values(%s,%d,%d)",tablename,"null",x,y); //注意如何向具有自增字段的数据库中插入记录 63 64 65 rt=mysql_real_query(con,tmp,strlen(tmp)); 66 if (rt) 67 { 68 printf("Error making query: %s !!!\n",mysql_error(con)); 69 } 70 else 71 { 72 printf("%s executed!!!\n",tmp); 73 } 74 75 sprintf(tmp,"select * from %s",tablename); 76 rt=mysql_real_query(con,tmp,strlen(tmp)); 77 if (rt) 78 { 79 printf("Error making query: %s !!!\n",mysql_error(con)); 80 } 81 else 82 { 83 printf("%s executed!!!\n",tmp); 84 } 85 res = mysql_store_result(con);//将结果保存在res结构体中 86 87 while(row = mysql_fetch_row(res)) 88 { 89 for(t=0;t<mysql_num_fields(res);t++) 90 { 91 printf("%s ",row[t]); 92 } 93 printf(".............\n"); 94 count ++; 95 } 96 97 printf("number of rows %d\n",count); 98 printf("mysql_free_result...\n"); 99 mysql_free_result(res); 100 mysql_close(con); 101 return 0; 102 }