在线
客服

在线客服
尊敬的客户,我们24小时竭诚为您服务 公司总机: 0755-83312037 (32条线)

客服
热线

0755-83312037 (32条线)
7*24小时客服服务热线

?

关注
微信

关注官方微信
TOP

返回
顶部

Mysql C API编程:用C语言编写的Mysql编程接口

发布时间:2019-04-13浏览次数:914 <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">Mysql C语言API编程入门讲解之详细篇。</font> </td> </tr></tbody></table> <p>软件开发中我们经常要访问数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的知识,本文就详细讲解如何使用Mysql的C语言API进行数据库编程。</p> <p>API,全称Application Programming Interfaces,即应用程序编程接口,我们可以调用这些接口,执行API函数提供的功能。</p> <p>Mysql C语言API就是用C语言编写的Mysql编程接口,使用这些接口函数可以实现对Mysql数据库的查询等操作。</p> <p><strong>Mysql的安装</strong></p> <p>要进行Mysql编程首先要在充当Mysql服务器的电脑和本机上都安装Mysql,服务器上的Mysql用来连接查询,本机上的Mysql作为开发之用,当然本机也可以兼顾服务器和开发之用。下载Mysql可以到http://www.mysql.com/downloads/mysql/。鸡啄米安装的是“Windows (x86, 64-bit), MSI Installer”版本。</p> <p>在Mysql安装过程中,安装选项一定要选上Development Components下的Client C API library(shared),这样才会将Mysql API的头文件和动态库安装到电脑中。</p> <p>安装完成后,我们编程要用的就是include目录下的头文件和lib目录下的库文件。</p> <p><strong>Mysql API数据结构</strong></p> <p>Mysql API中用到了很多结构体等数据类型,下面就简单说说常用的几个数据结构的含义,至于它们的定义鸡啄米就不贴了,大家可以到Mysql提供的mysql.h头文件中查看。</p> <p><strong>MYSQL</strong></p> <p>连接数据库前,必须先创建MYSQL变量,此变量在很多Mysql API函数会用到。它包含了一些连接信息等数据。</p> <p><strong>MYSQL_RES</strong></p> <p>MYSQL_RES结构体中包含了查询结果集,也就是从数据库中查询到的数据。可以使用mysql_store_result或mysql_use_result函数获得。</p> <p><strong>MYSQL_ROW</strong></p> <p><strong>MYSQL ROW的定义如下:</strong></p> <p>typedef char **MYSQL_ROW;</p> <p>可见,它实际上是char **类型,指向一个字符串数组。可以通过mysql_fetch_row函数获得。</p> <p><strong>MYSQL_FIELD</strong></p> <p>MYSQL_FIELD中包含了字段名、字段类型和大小等信息。可以重复调用mysql_fetch_field函数获得所有字段的信息。</p> <p><strong>Mysql C API编程步骤</strong></p> <p>1、首先我们要包含mysql的头文件,并链接mysql动态库。即添加以下语句:</p> <blockquote> <p>#include &lt;WinSock2.h&gt; // 进行网络编程需要winsock2.h</p> <p>#include &lt;mysql.h&gt;</p> <p>#pragma comment(lib, “libmysql.lib”)</p> </blockquote> <p>2、创建MYSQL变量。如:</p> <p>MYSQL mysql;</p> <p>3、初始化MYSQL变量。</p> <p>mysql_init(&amp;mysql);</p> <p>4、调用mysql_real_connect函数连接Mysql数据库。mysql_real_connect函数的原型如下:</p> <blockquote> <p>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);</p> </blockquote> <p>参数说明:mysql--前面定义的MYSQL变量;host--MYSQL服务器的地址;user--登录用户名;passwd--登录密码;db--要连接的数据库;port--MYSQL服务器的TCP服务端口;unix_socket--unix连接方式,为NULL时表示不使用socket或管道机制;clientflag--Mysql运行为ODBC数据库的标记,一般取0。连接失败时该函数返回0。</p> <p>5、调用mysql_real_query函数进行数据库查询。mysql_real_query函数的原型如下:</p> <p>int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);</p> <p>参数说明:mysql--前面定义的MYSQL变量;q--SQL查询语句;length--查询语句的长度。</p> <p>查询成功则该函数返回0。</p> <p>6、通过调用mysql_store_result或mysql_use_result函数返回的MYSQL_RES变量获取查询结果数据。</p> <p>两个函数的原型分别为:</p> <p>MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);</p> <p>MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);</p> <p>这两个函数分别代表了获取查询结果的两种方式。第一种,调用mysql_store_result函数将从Mysql服务器查询的所有数据都存储到客户端,然后读取;第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回,故经常我们使用mysql_store_result。</p> <p>7、调用mysql_fetch_row函数读取结果集数据。</p> <p>上述两种方式最后都是重复调用mysql_fetch_row函数读取数据。mysql_fetch_row函数的原型如下:</p> <p>MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);</p> <p>参数result就是mysql_store_result或mysql_use_result的返回值。</p> <p>该函数返回MYSQL_ROW型的变量,即字符串数组,假设为row,则row[i]为第i个字段的值。当到结果集尾部时,此函数返回NULL。</p> <p>8、结果集用完后,调用mysql_free_result函数释放结果集,以防内存泄露。mysql_free_result函数的原型如下:</p> <p>void STDCALL mysql_free_result(MYSQL_RES *result);</p> <p>9、不再查询Mysql数据库时,调用mysql_close函数关闭数据库连接。mysql_close函数的原型为:</p> <p>void STDCALL mysql_close(MYSQL *sock);</p> <p><strong>Mysql C API编程实例</strong></p> <p>这里给大家一个简单的Mysql API编程实例。使用VS2010编写。访问的数据库为安装Mysql后默认创建的名称为“mysql”的数据库,查询其“user”表的数据,步骤如下:</p> <p>1、创建一个Win32 Console Application(Win32控制台程序)的空工程(创建空工程需要在向导的Application Settings一步中,勾选Empty project),名称就取为mysql。</p> <p>2、在Solution Explorer窗口的工程名“mysql”上点右键,选择“Properties”,弹出工程的属性页,然后在左侧子窗口中,选择Configuration Properties-&gt;VC++ Directories,右侧子窗口中会显示一些设置项列表,然后在Include Directories项中添加Mysql的Include目录,在Library Directories项中添加Mysql的lib目录。</p> <p style="TEXT-ALIGN: center"><img border="0" alt="Mysql C语言API编程入门讲解之详细篇" src="http://www.webjx.com/files/allimg/121224/1337320.gif" width="598" height="276"></p> <p>3、新建一个cpp文件,取名mysql.cpp。</p> <p>4、在mysql.cpp文件中包含mysql头文件并链接mysql动态库。</p> <blockquote> <p>#include &lt;WinSock2.h&gt;</p> <p>#include &lt;mysql.h&gt;</p> <p>#pragma comment(lib, “libmysql.lib”)</p> </blockquote> <p>这里要注意,因为mysql用到了网络连接的接口函数,所以需要在前面包含WinSock2.h文件。</p> <p>同时本例中使用了输出流cout,所以还要包含输入输出流头文件:</p> <blockquote> <p>#include &lt;iostream&gt;</p> <p>using namespace std;</p> </blockquote> <p>5、创建main函数,并修改函数体如下:</p> <blockquote> <p>int main()</p> <p>{</p> <p>MYSQL mysql;</p> <p>MYSQL_RES *res;</p> <p>MYSQL_ROW row;</p> <p>// 初始化MYSQL变量</p> <p>mysql_init(&amp;mysql);</p> <p>// 连接Mysql服务器,本例使用本机作为服务器。访问的数据库名称为“msyql”,参数中的user为你的登录用户名,***为登录密码,需要根据你的实际用户进行设置</p> <p>if (!mysql_real_connect(&amp;mysql, “127.0.0.1”, “user”, “123”, “mysql”, 3306, 0, 0))</p> <p>{</p> <p>cout &lt;&lt; “mysql_real_connect failure!” &lt;&lt; endl;</p> <p>return 0;</p> <p>}</p> <p>// 查询mysql数据库中的user表</p> <p>if (mysql_real_query(&amp;mysql, “select * from user”, (unsigned long)strlen(“select * from user”)))</p> <p>{</p> <p>cout &lt;&lt; “mysql_real_query failure!” &lt;&lt; endl;</p> <p>return 0;</p> <p>}</p> <p>// 存储结果集</p> <p>res = mysql_store_result(&amp;mysql);</p> <p>if (NULL == res)</p> <p>{</p> <p>cout &lt;&lt; “mysql_store_result failure!” &lt;&lt; endl;</p> <p>return 0;</p> <p>}</p> <p>// 重复读取行,并输出第一个字段的值,直到row为NULL</p> <p>while (row = mysql_fetch_row(res))</p> <p>{</p> <p>cout &lt;&lt; row[0] &lt;&lt; endl;</p> <p>}</p> <p>// 释放结果集</p> <p>mysql_free_result(res);</p> <p>// 关闭Mysql连接</p> <p>mysql_close(&amp;mysql);</p> <p>return 0;</p> <p>}</p> </blockquote> <p>6、将mysql安装目录中的libmysql.dll动态库文件拷贝到工程的当前目录,运行程序。</p> <p>如果你跟鸡啄米一样使用的是mysql的64位版本,此时程序会报错,有很多不能解析的符号,这是因为我们的工程是32位的,应该改为64位,方法是,上面的工程属性页的右上角有个Configuration Manager按钮,点击它弹出Configuration Manager对话框,下面的列表中可以看到有我们的工程,Platform列显示为“Win32”:</p> <p style="TEXT-ALIGN: center"><img border="0" alt="Mysql C语言API编程入门讲解之详细篇" src="http://www.webjx.com/files/allimg/121224/1337321.gif" width="519" height="357"></p> <p>这里需要点击右侧的箭头下拉,选择New弹出New Project Platform对话框,New platform选择x64创建新Platform:</p> <p style="TEXT-ALIGN: center"><img border="0" alt="Mysql C语言API编程入门讲解之详细篇" src="http://www.webjx.com/files/allimg/121224/1337322.gif" width="339" height="245"></p> <p>上述的Platform列选择x64就可以了。再次运行程序,你会发现它果然不报错了。</p> <p>本文就到这里了,到此大家应该对Mysql C API编程有了基本的了解了,在实际开发中可以不断深入研究。</p>