C语言连接MySQL数据库

时间:2022-05-14 11:26:49

作者:子虚

转自:http://blog.csdn.net/lgouc/article/details/7550108


不想用ODBC什么的连接数据库,想直接用MySQL提供的接口连接数据库。我用的是VS2005。

网上的一些介绍都是修改项目属性等的设置,我不喜欢那样。首先 我们需要的文件有mysql.h   my_alloc.h   my_list.h   mysql_com.h   mysql_time.h   mysql_version.h   typelib.h  以及libmysql.lib和libmysql.dll全拷到项目文件夹下。 以上提到的文件都在MySQL安装目录下,比如我的是:C:\Program Files\MySQL\MySQL Server 5.5。.h文件在include目录下;  .lib和.dll文件在lib目录下。

准备好后,首先包含头文件和链接MySQL库,这里要注意不要忘记包含winsock.h,这是连接数据库必须的,从WorkBench连接数据库时弹出的对话框可以看出是通过TCP连接的。

C语言连接MySQL数据库

#include "mysql.h"

#include <winsock.h>

#pragma comment(lib, "libmysql.lib")


定义两个MYSQL结构体变量

MYSQL mysql, *sock;

下面是初始化连接

mysql_init(&mysql);

主要给结构体内的元素赋初值。

接下来是真正的连接

mysql_real_connect(&mysql, "localhost", "USERNAME", "PASSWORD", "DBNAME", NULL, 0, NULL);

第一个参数不说了;第二个参数是数据库所在的主机地址;第三、四个参数是用户名、密码;第五个参数是要连接的数据库名称;第六个参数是端口号,可以指定也可以赋为0;第七个参数是指定连接的套接字,也不用管;第八个参数一般情况下都是0。

注意函数的返回值和PHP的不一样。连接成功返回0,否则返回非0。出错信息可以调用sql_error(MYSQL* )来查看。

定义sql语句(最后没有分号):

char sqlbuf[100] = "SELECT Device_Route FROM Device";

下面让MySQL执行sql语句:

mysql_query(sock, sqlbuf); 

该函数也是成功(即使没有查询到数据)返回0,失败返回非0。

查询到了数据后就是获取查询结果了,这里还要定义两个结构体:查询结果结构体和记录结构体(保存一条记录)

MYSQL_RES *res;

MYSQL_ROW row;  // 本质上就是二维数组

获取查询结果

res = mysql_store_result(sock);

获取每一条记录

while (row = mysql_fetch_row(res))

{

        // 添加自己的存储查询结果代码

}

释放查询结果:

mysql_free_result(res);

关闭MySQL连接:

mysql_close(sock);

sock = NULL;

如果是INSERT、UPDATE等非查询语句到mysql_query()就可以结束了,因为没有结果可存。

完整的实现如下:

[cpp] view plaincopy
  1.   
[cpp] view plaincopy
  1. #include <winsock.h>  
  2. #include "accessMySQL.h"  
  3. #include "mysql.h"  
  4. void main()  
  5. {  
  6.     MYSQL mysql, *sock;  
  7.   
  8.     mysql_init(&mysql);  
  9.     if (!(sock = mysql_real_connect(&mysql, "localhost""root""******""MYDB", 0, NULL, 0)))  
  10.     {  
  11.         printf("Cannot connect to database:%s\n",mysql_error(sock));  
  12.         return false;  
  13.     }  
  14.     char sqlbuf[200] = "SELECT Device_Route FROM Device limit 0,1";  
  15.     if (mysql_query(sock, sqlbuf))  
  16.     {  
  17.         printf("Query Failed:%s", mysql_error(sock));  
  18.         return 0;  
  19.     }  
  20.     MYSQL_RES *res;  
  21.     MYSQL_ROW row;  
  22.     if (!(res = mysql_store_result(sock)))  
  23.     {  
  24.         printf("Failed to store result:%s", mysql_error(sock));  
  25.         return 0;  
  26.     }  
  27.     while (row = mysql_fetch_row(res))  
  28.     {  
  29.         puts(row[0]);  
  30.     }  
  31.     mysql_free_result(res);  
  32.     mysql_close(sock);  
  33.   
  34. }  
[cpp] view plaincopy
  1.   
The End.