<mySql完全手册>2011031401
【实践】
MySql和C部分实践
环境:
Vs2005+Xp+Sp3
MySql Server 5.0
库文件和头文件路径分别:
D:\Program Files\MySQL\MySQL Server 5.0\lib\debug
D:\Program Files\MySQL\MySQL Server 5.0\include
实践过程:
1、新建Windows32 Console程序
2、引用头文件#include <mysql>
编译,出现错误,找不到头文件~
在Xp环境变量中添加路径,再编译,仍然找不到~
看来只有在vs2005的环境配置中处理,实际操作:
工具->选项->项目和解决方案->VC++目录,这里有一个库文件路径和头文件路径,分别添加相应的路径
继续编译,错误,mysql_com.h中找不到my_socket类型~
具体指向这句话:int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen,
unsigned int timeout);
网上查询需要#include <winsock.h>在#include <mysql.h>前面,ok,添加了,细细想下,应该还有问题:没有引用库文件
随后,在当前项目属性中,找到:配置属性->链接器->输入->附加依赖项
录入:D:\Program Files\MySQL\MySQL Server 5.0\lib\debug\mysqlclient.lib wsock32.lib
杯具,错误Lnk1104,找不到D:\program.obj~
其实最开始我直接拷贝的路径,串"D:\Program Files\MySQL\MySQL Server 5.0\lib\debug\mysqlclient.lib
这个的错误也是上面那个,后面改成无引号的,还是这个错~
linker高级命令中显示如下:你会发现路径错误(红色部分)
/OUT:"d:\My Documents\Visual Studio 2005\Projects\LibMath\Debug\TestMysql.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\TestMysql.exe.intermediate.manifest" /DEBUG /PDB:"d:\My Documents\Visual Studio 2005\Projects\LibMath\debug\TestMysql.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86 /ERRORREPORT:PROMPT "D:\Program Files\MySQL\MySQL Server 5.0\lib\debug\mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
最后查询到,在引用库需要""来锁定完整路径的库,
最后在附加依赖项保存是这个串:"D:\Program Files\MySQL\MySQL Server 5.0\lib\debug\mysqlclient.lib" wsock32.lib
编译,出现错误lnk2005,lnk2019,这个错误是运行库问题,浏览下项目属性,发现当前运行库为MDd;那么我只能改成MTd
编译,成功了~
F5运行,cmd窗口出现“Error in connection:null”字符
ok,检查了,是帐号错误,本来是root,在这里用成sa了
修改成root,编译运行,出现字符"Query executed successfully"
到这里基本上算运行了一个正常的实践流程,至少在链接mySql server和简单查询上已经成功了~hoho
下面贴出h和cpp文件:
1 // stdafx.h : 标准系统包含文件的包含文件,
2 // 或是经常使用但不常更改的
3 // 特定于项目的包含文件
4 //
5
6 #pragma once
7
8
9 #define WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料
10 #include <stdio.h>
11 #include <tchar.h>
12
13 #include <winsock.h>//这个文件在mysql.h的前面哈
14
15 // TODO: 在此处引用程序需要的其他头文件
16 #include <mysql.h>
1 // TestMysql.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5
6
7
8 int _tmain(int argc, _TCHAR* argv[])
9 {
10 MYSQL mysql;
11 MYSQL_RES * result;
12
13 mysql_init(&mysql);
14
15 if (!(mysql_real_connect(&mysql ,"localhost" ,"root" ,"sa" ,"library" ,0 ,NULL ,0)))
16 {
17 fprintf(stderr, "Error in connection:%s\n");
18 return 0;
19 }
20
21 if (mysql_query(&mysql ,"Select * from tbmembers") != 0)
22 {
23 fprintf(stdout ,"Error in query\n");
24 }
25 else
26 {
27 fprintf(stdout ,"Query executed successfully\n");
28 }
29
30 mysql_close(&mysql);
31
32 return 0;
33 }
好,这个算结束了本次实践过程的记录
结论:
1、mysqlclient.lib运行库是MTd,多线程静态库;对应Release版本就是MT
2、mysql.h头文件还是依赖winsock.h,说明其开发的基础还是在sock,属于sock扩展应用
无论生活、还是技术,一切都不断的学习和更新~~~努力~