Linux下C操作Mysql入门

40E333CA-7F22-4173-937A-40F8CE67A3E9
今天走了一下C操作Mysql之路,方法和PHP操作Mysql的整个流程实在很像,所以也没有什么难点。
我的环境:
操作系统:Centos6.5
编译器:gcc 4.4.7
Mysql版本:5.1.73

准备工作:
要使用C操作Mysql,一定要有Mysql提供的API(如mysql.h),所以首先,需要做点准备工作,首先需要安装mysql-devel,终端下直接输入一下命令安装
yum install mysql-devel
如果是Ubuntu,则执行apt-get install mysql-devel
安装过程一般不会出大问题,除非你真的那么点背。。。

然后呢?准备出一张表来,我这里是新建了一名为test的数据库,并在test库下新建了一张user表,表的结构为:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

好,让我们看看mysql.h安装到哪里了
终端中执行命令,查看mysql.h的路径
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
find / -name mysql.h
[/cc]
屏幕快照 2015-12-25 下午2.29.00

Linux下C标准库一般放在以下路径,也就是说gcc在编译的时候会从以下这几个路径中去找头文件
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
[/cc]
详细信息点击这里:https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html

所以我在程序中引入mysql.h的时候,就要注意路径是否正确,你也要根据自己的情况来引入

[cc lang=”c” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#include
[/cc]

新建一个mysql.c的文件,下面我们所有的代码都将在这一个文件中,好,动手去做吧!!

让C和Mysql握手
[cc lang=”c” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#include
#include
int main()
{
//新建一个MYSQL变量
MYSQL mysql;
//初始化mysql句柄
mysql_init(&mysql);
if(!mysql_real_connect(&mysql, “localhost”, “root”, “123456”, “test”, 0, NULL, 0)) {
printf(“Can’t Connect Mysql Server!\n”);
}else{
printf(“Connect Mysql Server Successed!\n”);
}
mysql_close(&mysql);
return 0;
}
[/cc]
好,我知道你现在肯定很着急,想去编译代码,如果直接gcc你就输了,正确的编译命令是这样的
[cc lang=”c” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
gcc mysql.c -o mysql -L/usr/lib64/mysql -lmysqlclient
[/cc]
1.为什么要这么编译?
因为直接编译的话,会报出gcc无法找到连接器的错误,所以我么在后面通过加-L -l等参数来动态链接需要的链接器,才会编译成功。
2.什么是mysql句柄?
答:句柄的概念其实在其他系统编程中经常遇到,实际上句柄可以理解为一把钥匙。在我们这里,如果C拿到了这把钥匙,但还是不能很幸运的进Mysql的家?
3.为什么不能进入Mysql的家?
答:Mysql是一个非常小心的家伙,当mysql_real_connect作为一个信使去Mysql的家门口时,做了一系列类似于指纹的验证啊,脸部的验证啊之类的,如果它很幸运的都验证成功了的话,那么Mysql会给C的钥匙做一次升级,这样以后就不需要那么繁琐的验指纹验脸之类的杂活儿了,只要C拿到了钥匙就可以直接进入Mysql的家门。

让我们在Mysql家里一探究竟
[cc lang=”c” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#include
#include
#include
int main()
{
//定义变量
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
char *query;
int filed_key;
//初始化Mysql句柄
mysql_init(&mysql);
//连接mysql
if(!mysql_real_connect(&mysql, “localhost”, “root”, “123456”, “test”, 0, NULL, 0)) {
printf(“Can’t Connect Mysql Server!\n”);
}else{
printf(“Connect Mysql Server Successed!\n”);
}
//新增一条数据
query = “INSERT INTO user(name) VALUES(‘c’)”;
if(mysql_real_query(&mysql, query, (unsigned int)strlen(query));) {
printf(“Query Failed!\n”);
return 0;
}else {
printf(“Query Successed\n”);
}
//从句柄中读取结果
res = mysql_store_result(&mysql);
//循环读取结果
while(row = mysql_fetch_row(res)) {
//mysql_num_fields计算一行结果集中的字段数量
for(filed_key=0; filed_key编译并查看结果:
A04F9808-6BAB-430F-BB3A-418896BCAF5D

而对于改 和 删 数据,这里就不再赘述,很简单,只需要更改query字符串即可,这个任务就留给读者。

Linux下C操作Mysql入门
Tags:     

发表评论

电子邮件地址不会被公开。 必填项已用*标注