C语言连接MySQL数据库

来源:互联网 发布:一不小心买了淘宝爆款 编辑:程序博客网 时间:2024/05/18 03:08

        不想用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连接的。


#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()就可以结束了,因为没有结果可存。

完整的实现如下:

#include <winsock.h>#include "accessMySQL.h"#include "mysql.h"void main(){    MYSQL mysql, *sock;    mysql_init(&mysql);    if (!(sock = mysql_real_connect(&mysql, "localhost", "root", "******", "MYDB", 0, NULL, 0)))    {        printf("Cannot connect to database:%s\n",mysql_error(sock));        return false;    }    char sqlbuf[200] = "SELECT Device_Route FROM Device limit 0,1";    if (mysql_query(sock, sqlbuf))    {        printf("Query Failed:%s", mysql_error(sock));        return 0;    }    MYSQL_RES *res;    MYSQL_ROW row;    if (!(res = mysql_store_result(sock)))    {        printf("Failed to store result:%s", mysql_error(sock));        return 0;    }    while (row = mysql_fetch_row(res))    {        puts(row[0]);    }    mysql_free_result(res);    mysql_close(sock);}
The End.

原创粉丝点击