MYSQL教程之Mysql C API编程:用C言语编写的Mysql编...
MySQL部署迅速,因此移植过程不会导致生产中断。而且,较短的学习曲线可以让你的系统管理员迅速掌握它的运行和维护。而且,MySQL的易于维护和管理意味着目前的职员可以处理目前的工作。</p>软件开辟中我们常常要会见数据库,存取数据,之前已有网友提出让鸡啄米讲讲数据库编程的常识,本文就具体解说怎样利用Mysql的C言语API举行数据库编程。API,全称ApplicationProgrammingInterfaces,即使用程序编程接口,我们能够挪用这些接口,实行API函数供应的功效。
MysqlC言语API就是用C言语编写的Mysql编程接口,利用这些接口函数能够完成对Mysql数据库的查询等操纵。
Mysql的安装
要举行Mysql编程起首要在充任Mysql服务器的电脑和本机上都安装Mysql,服务器上的Mysql用来毗连查询,本机上的Mysql作为开辟之用,固然本机也能够分身服务器和开辟之用。下载Mysql能够到http://www.mysql.com/downloads/mysql/。鸡啄米安装的是“Windows(x86,64-bit),MSIInstaller”版本。
在Mysql安装过程当中,安装选项必定要选上DevelopmentComponents下的ClientCAPIlibrary(shared),如许才会将MysqlAPI的头文件和静态库安装到电脑中。
安装完成后,我们编程要用的就是include目次下的头文件和lib目次下的库文件。
MysqlAPI数据布局
MysqlAPI顶用到了良多布局体等数据范例,上面就复杂说说经常使用的几个数据布局的寄义,至于它们的界说鸡啄米就不贴了,人人能够到Mysql供应的mysql.h头文件中检察。
MYSQL
毗连数据库前,必需先创立MYSQL变量,此变量在良多MysqlAPI函数会用到。它包括了一些毗连信息等数据。
MYSQL_RES
MYSQL_RES布局体中包括了查询了局集,也就是从数据库中查询到的数据。可使用mysql_store_result或mysql_use_result函数取得。
MYSQL_ROW
MYSQLROW的界说以下:
typedefchar**MYSQL_ROW;
可见,它实践上是char**范例,指向一个字符串数组。能够经由过程mysql_fetch_row函数取得。
MYSQL_FIELD
MYSQL_FIELD中包括了字段名、字段范例和巨细等信息。能够反复挪用mysql_fetch_field函数取得一切字段的信息。
MysqlCAPI编程步骤
1、起首我们要包括mysql的头文件,并链接mysql静态库。即增加以下语句:
#include<WinSock2.h>//举行收集编程必要winsock2.h
#include<mysql.h>
#pragmacomment(lib,“libmysql.lib”)
2、创立MYSQL变量。如:
MYSQLmysql;
3、初始化MYSQL变量。
mysql_init(&mysql);
4、挪用mysql_real_connect函数毗连Mysql数据库。mysql_real_connect函数的原型以下:
MYSQL*STDCALLmysql_real_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedintport,constchar*unix_socket,unsignedlongclientflag);
参数申明: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函数的原型以下:
intSTDCALLmysql_real_query(MYSQL*mysql,constchar*q,unsignedlonglength);
参数申明:mysql--后面界说的MYSQL变量;q--SQL查询语句;length--查询语句的长度。
查询乐成则该函数前往0。
6、经由过程挪用mysql_store_result或mysql_use_result函数前往的MYSQL_RES变量猎取查询了局数据。
两个函数的原型分离为:
MYSQL_RES*STDCALLmysql_store_result(MYSQL*mysql);
MYSQL_RES*STDCALLmysql_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_ROWSTDCALLmysql_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函数的原型以下:
voidSTDCALLmysql_free_result(MYSQL_RES*result);
9、不再查询Mysql数据库时,挪用mysql_close函数封闭数据库毗连。mysql_close函数的原型为:
voidSTDCALLmysql_close(MYSQL*sock);
MysqlCAPI编程实例
这里给人人一个复杂的MysqlAPI编程实例。利用VS2010编写。会见的数据库为安装Mysql后默许创立的称号为“mysql”的数据库,查询其“user”表的数据,步骤以下:
1、创立一个Win32ConsoleApplication(Win32把持台程序)的空工程(创立空工程必要在导游的ApplicationSettings一步中,勾选Emptyproject),称号就取为mysql。
2、在SolutionExplorer窗口的工程名“mysql”上点右键,选择“Properties”,弹收工程的属性页,然后在左边子窗口中,选择ConfigurationProperties->VC++Directories,右边子窗口中会显现一些设置项列表,然后在IncludeDirectories项中增加Mysql的Include目次,在LibraryDirectories项中增加Mysql的lib目次。
3、新建一个cpp文件,取名mysql.cpp。
4、在mysql.cpp文件中包括mysql头文件并链接mysql静态库。
#include<WinSock2.h>
#include<mysql.h>
#pragmacomment(lib,“libmysql.lib”)
这里要注重,由于mysql用到了收集毗连的接口函数,以是必要在后面包括WinSock2.h文件。
同时本例中利用了输入流cout,以是还要包括输出输入流头文件:
#include<iostream>
usingnamespacestd;
5、创立main函数,并修正函数体以下:
intmain()
{
MYSQLmysql;
MYSQL_RES*res;
MYSQL_ROWrow;
//初始化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_connectfailure!”<<endl;
return0;
}
//查询mysql数据库中的user表
if(mysql_real_query(&mysql,“select*fromuser”,(unsignedlong)strlen(“select*fromuser”)))
{
cout<<“mysql_real_queryfailure!”<<endl;
return0;
}
//存储了局集
res=mysql_store_result(&mysql);
if(NULL==res)
{
cout<<“mysql_store_resultfailure!”<<endl;
return0;
}
//反复读取行,并输入第一个字段的值,直到row为NULL
while(row=mysql_fetch_row(res))
{
cout<<row[0]<<endl;
}
//开释了局集
mysql_free_result(res);
//封闭Mysql毗连
mysql_close(&mysql);
return0;
}
6、将mysql安装目次中的libmysql.dll静态库文件拷贝到工程确当前目次,运转程序。
假如你跟鸡啄米一样利用的是mysql的64位版本,此时程序会报错,有良多不克不及剖析的标记,这是由于我们的工程是32位的,应当改成64位,办法是,下面的工程属性页的右上角有个ConfigurationManager按钮,点击它弹出ConfigurationManager对话框,上面的列表中能够看到有我们的工程,Platform列显现为“Win32”:
这里必要点击右边的箭头下拉,选择New弹出NewProjectPlatform对话框,Newplatform选择x64创立新Platform:
上述的Platform列选择x64就能够了。再次运转程序,你会发明它公然不报错了。
本文就到这里了,到此人人应当对MysqlCAPI编程有了基础的懂得了,在实践开辟中能够不休深切研讨。
MySQL在业界的流行所带来的另一个好处是,人们总可以很轻松地发现本行业的MySQL学习教程。厂商都希望他们的开发工具和应用程序框架可以与MySQL数据库兼容。 学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了! 相信各位对数据库和怎么样学习数据库都有一些经验和看法,也会有人走了一些弯路总结出自己的经验来,希望大家能把各自的看法和经验拿出来分享,给别人一份帮助,给自己一份快乐 这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。 可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。 如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录. 所以你总能得到相应的升级版本,来满足你的需求。 微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。 分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。
页:
[1]