加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Mysql C语言API编程入门讲解之详细篇

发布时间:2018-04-24 03:06:12 所属栏目:编程 来源:鸡啄米博客
导读:软件开拓中我们常常要会见数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的常识,本文就具体讲授怎样行使Mysql的C说话API举办数据库编程。 API,全称Application Programming Interfaces,即应用措施编程接口,我们可以挪用这些接口,执行AP
副问题[/!--empirenews.page--]

软件开拓中我们常常要会见数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的常识,本文就具体讲授怎样行使Mysql的C说话API举办数据库编程。

API,全称Application Programming Interfaces,即应用措施编程接口,我们可以挪用这些接口,执行API函数提供的成果。

Mysql C说话API就是用C说话编写的Mysql编程接口,行使这些接口函数可以实现对Mysql数据库的查询等操纵。

Mysql的安装

要举办Mysql编程起主要在充当Mysql处事器的电脑和本机上都安装Mysql,处事器上的Mysql用来毗连查询,本机上的Mysql作为开拓之用,虽然本机也可以分身处事器和开拓之用。下载Mysql可以到http://www.mysql.com/downloads/mysql/。鸡啄米安装的是“Windows (x86, 64-bit), MSI Installer”版本。

在Mysql安装进程中,安装选项必然要选上Development Components下的Client C API library(shared),这样才会将Mysql API的头文件和动态库安装到电脑中。

安装完成后,我们编程要用的就是include目次下的头文件和lib目次下的库文件。

Mysql API数据布局

Mysql API顶用到了许多布局体等数据范例,下面就简朴说说常用的几个数据布局的寄义,至于它们的界说鸡啄米就不贴了,各人可以到Mysql提供的mysql.h头文件中查察。

MYSQL

毗连数据库前,必需先建设MYSQL变量,此变量在许多Mysql API函数会用到。它包括了一些毗连信息等数据。

MYSQL_RES

MYSQL_RES布局体中包括了查询功效集,也就是从数据库中查询到的数据。可以行使mysql_store_result或mysql_use_result函数得到。

MYSQL_ROW

MYSQL ROW的界说如下:

typedef char **MYSQL_ROW;

可见,它现实上是char **范例,指向一个字符串数组。可以通过mysql_fetch_row函数得到。

MYSQL_FIELD

MYSQL_FIELD中包括了字段名、字段范例和巨细等信息。可以一再挪用mysql_fetch_field函数得到全部字段的信息。

Mysql C API编程步调

1、起首我们要包括mysql的头文件,并链接mysql动态库。即添加以下语句:

#include <WinSock2.h> // 举办收集编程必要winsock2.h

#include <mysql.h>

#pragma comment(lib, “libmysql.lib”)

2、建设MYSQL变量。如:

MYSQL mysql;

3、初始化MYSQL变量。

mysql_init(&mysql);

4、挪用mysql_real_connect函数毗连Mysql数据库。mysql_real_connect函数的原型如下:

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);

参数声名:mysql--前面界说的MYSQL变量;host--MYSQL处事器的地点;user--登任命户名;passwd--登录暗码;db--要毗连的数据库;port--MYSQL处事器的TCP处事端口;unix_socket--unix毗连方法,为NULL时暗示不行使socket或管道机制;clientflag--Mysql运举动ODBC数据库的标志,一样平常取0。毗连失败时该函数返回0。

5、挪用mysql_real_query函数举办数据库查询。mysql_real_query函数的原型如下:

int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);

参数声名:mysql--前面界说的MYSQL变量;q--SQL查询语句;length--查询语句的长度。

查询乐成则该函数返回0。

6、通过挪用mysql_store_result或mysql_use_result函数返回的MYSQL_RES变量获取查询功效数据。

两个函数的原型别离为:

MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);

MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);

这两个函数别离代表了获取查询功效的两种方法。第一种,挪用mysql_store_result函数将从Mysql处事器查询的全部数据都存储到客户端,然后读取;第二种,挪用mysql_use_result初始化检索,以便于后头一行一行的读取功效集,而它自己并没有从处事器读取任何数据,这种方法较之第一种速率更快且所需内存更少,但它会绑定处事器,阻止其他线程更新任何表,并且必需一再执行mysql_fetch_row读取数据,直至返回NULL,不然未读取的行会在下一次查询时作为功效的一部门返回,故常常我们行使mysql_store_result。

7、挪用mysql_fetch_row函数读取功效集数据。

上述两种方法最后都是一再挪用mysql_fetch_row函数读取数据。mysql_fetch_row函数的原型如下:

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

参数result就是mysql_store_result或mysql_use_result的返回值。

该函数返回MYSQL_ROW型的变量,即字符串数组,假设为row,则row[i]为第i个字段的值。当到功效集尾部时,此函数返回NULL。

8、功效集用完后,挪用mysql_free_result函数开释功效集,以防内存泄漏。mysql_free_result函数的原型如下:

void STDCALL mysql_free_result(MYSQL_RES *result);

9、不再查询Mysql数据库时,挪用mysql_close函数封锁数据库毗连。mysql_close函数的原型为:

void STDCALL mysql_close(MYSQL *sock);

Mysql C API编程实例

这里给各人一个简朴的Mysql API编程实例。行使VS2010编写。会见的数据库为安装Mysql后默认建设的名称为“mysql”的数据库,查询其“user”表的数据,步调如下:

1、建设一个Win32 Console Application(Win32节制台措施)的空工程(建设空工程必要在领导的Application Settings一步中,勾选Empty project),名称就取为mysql。

2、在Solution Explorer窗口的工程名“mysql”上点右键,选择“Properties”,弹出工程的属性页,然后在左侧子窗口中,选择Configuration Properties->VC++ Directories,右侧子窗口中会表现一些配置项列表,然后在Include Directories项中添加Mysql的Include目次,在Library Directories项中添加Mysql的lib目次。

3、新建一个cpp文件,取名mysql.cpp。

4、在mysql.cpp文件中包括mysql头文件并链接mysql动态库。

#include <WinSock2.h>

#include <mysql.h>

#pragma comment(lib, “libmysql.lib”)

这里要留意,由于mysql用到了收集毗连的接口函数,以是必要在前面包括WinSock2.h文件。

同时本例中行使了输出流cout,以是还要包括输入输出流头文件:

#include <iostream>

using namespace std;

5、建设main函数,并修改函数体如下:

int main()

{

MYSQL mysql;

MYSQL_RES *res;

MYSQL_ROW row;

// 初始化MYSQL变量

mysql_init(&mysql);

// 毗连Mysql处事器,本例行使本机作为处事器。会见的数据库名称为“msyql”,参数中的user为你的登任命户名,***为登录暗码,必要按照你的现适用户举办配置

if (!mysql_real_connect(&mysql, “127.0.0.1”, “user”, “123”, “mysql”, 3306, 0, 0))

{

cout << “mysql_real_connect failure!” << endl;

return 0;

}

// 查询mysql数据库中的user表

if (mysql_real_query(&mysql, “select * from user”, (unsigned long)strlen(“select * from user”)))

{

cout << “mysql_real_query failure!” << endl;

return 0;

}

// 存储功效集

res = mysql_store_result(&mysql);

if (NULL == res)

{

cout << “mysql_store_result failure!” << endl;

return 0;

}

// 一再读取行,并输出第一个字段的值,直到row为NULL

while (row = mysql_fetch_row(res))

{

cout << row[0] << endl;

}

// 开释功效集

mysql_free_result(res);

// 封锁Mysql毗连

mysql_close(&mysql);

return 0;

}

6、将mysql安装目次中的libmysql.dll动态库文件拷贝到工程的当前目次,运行措施。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读