linux小知识--CentOS7安装配置开发Mysql全过程(二)

前面一章讲了如何在CentOS7下面安装配置Mysql服务器,入个门

那么作为C语言开发选手,本章的重点就是介绍如何在C语言环境下,使用mysql数据库来存储数据。
在这里插入图片描述

编译环境的配置

首先要明白我们用的是C语言的接口API,所以要有mysql的库和头文件来支撑。
CentOS命令下运行安装命令

 yum install mysql-devel

系统会将mysql的头文件及so文件帮我们安装好,库文件默认安装路径是

/usr/lib64/mysql/

头文件默认安装路径是

/usr/include/mysql/

其实介绍这个也没什么用。因为后面用不到
在这里插入图片描述

然后,我们在编译代码的时候,需要链接mysql的库,这里采用的方式是利用mysql自带的命令

mysql_config

自动获取编译参数,然后添加到Makefile中。

[root@localhost ~]# mysql_config
Usage: /usr/bin/mysql_config-64 [OPTIONS]
Compiler: GNU 4.8.5
Options:
        --cflags         [-I/usr/include/mysql -m64 ]
        --cxxflags       [-I/usr/include/mysql -m64 ]
        --include        [-I/usr/include/mysql]
        --libs           [-L/usr/lib64/mysql -lmysqlclient -lpthread -lm -lrt -ldl]
        --libs_r         [-L/usr/lib64/mysql -lmysqlclient -lpthread -lm -lrt -ldl]
        --plugindir      [/usr/lib64/mysql/plugin]
        --socket         [/var/lib/mysql/mysql.sock]
        --port           [0]
        --version        [5.7.35]
        --libmysqld-libs [-L/usr/lib64/mysql -lmysqld -lpthread -lm -lrt -ldl -lcrypt -laio -lnuma]
        --variable=VAR   VAR is one of:
                pkgincludedir [/usr/include/mysql]
                pkglibdir     [/usr/lib64/mysql]
                plugindir     [/usr/lib64/mysql/plugin]

所以,我们只需要修改我们的Makefile,增加如下两个参数,即可完美添加mysql库。

CFLAGS += `mysql_config --cflags`
LDFLAGS += `mysql_config --libs`

看看,人家成熟的软件,想的就是周到,咱们的修行之路还长着呢。
在这里插入图片描述

代码中的应用

接下来就介绍一下如何在c语言中编写使用mysql。
首先我们假设一个表格,叫mytable
有两列,name和value。

类型
namevarchar[128]
valueint

头文件的包含

需要在你的c文件或者h文件头部,安装如下顺序进行关键头文件包含

#include <mysql/mysql.h>
#define __USE_GNU
#include <sched.h>
#include <pthread.h>

为何这么包含这三个文件,我也忘了。
在这里插入图片描述
你可以只包含第一个文件,看看报什么错误,增加一下印象。

初始化链接

然后是数据库的初始化,这里是单线程的写法,所以链接定义为全局变量。后面有多线程的写法。
通常定义两个初始化函数

MYSQL *MQ_CON=NULL;

int mysql_cn_init(void)
{
	MQ_CON = mysql_init(NULL);

	if (!mysql_real_connect(MQ_CON, "192.168.3.3", "root", "ACB123@abc", "mydb", 0, NULL, 0)) 
	{
		printf("%s\n", mysql_error(MQ_CON));
		return -1;
	}
	return 0;
}
int mysql_cn_exit(void)
{
	mysql_close(MQ_CON);
	return 0;
}

mysql语句的调用

清空数据表

mysql_query(MQ_CON,"DELETE FROM mytable");

插入数据

mysql_query(MQ_CON,"INSERT INTO mytable(name,value) VALUES ('abc',1)");

更新数据

mysql_query(MQ_CON,"UPDATE mytable SET value=2 WHERE name='abc'");

删库跑路
在这里插入图片描述

所有能在mysql的交互窗口执行的命令,都可以拿来在此处运行。

调用结果的解析

查询结果是我们比较关注返回值的地方

MYSQL_ROW row;
MYSQL_RES *result;
int num_fields;

mysql_query(MQ_CON, "SELECT * FROM mytable");
result = mysql_store_result(MQ_CON);
//获取列数量,这里将会获得2,因为有name和value两个列
num_fields = mysql_num_fields(result);
//判断结果是否是两列,不是则不处理
if(num_fields==2)
{
	//循环读取每行
	while ((row = mysql_fetch_row(result)))
	{
		char name[128]={0};
		int value=0;
		//这里展示类两种比较标准的获取方法,防止出现空指针的时候,造成程序崩溃。
		if(row[0])
			strcpy(name,row[0]);
		else
			strcpy(name,"");

		value = row[1] ? atoi(row[1]):0;
		printf("name:%s,value:%d \n",name,value);
	}
}
//最后一定要记得释放结果
mysql_free_result(result);

获取统计结果

mysql_query(MQ_CON, "SELECT SUM(value) AS allPvalue FROM mytable");

以上就是C语言的mysqlAPI调用范例,足够简单的读写操作。

更加详细的mysql操作可以参考菜鸟教程中的mysql教程

多线程下开发(未验证)

这部分资料网上倒是没有多少代码举例的,参考资料自己写了一组接口,不过还没有测试,哪位可以顺手帮我测试一下。
在这里插入图片描述

据可靠资料显示,大部分的API是线程安全的,只有在初始化和结束的时候,有些许的不同。


MYSQL *mysql_cn_init_pthread(void)
{
	MYSQL *MQ_CON=NULL;
	my_init();
	mysql_thread_init();
	//初始化 myData
	MQ_CON= malloc(sizeof(MYSQL));
	memset(&MQ_CON, 0, sizeof(MYSQL));
	
	if (!mysql_real_connect(MQ_CON, db41_server, db41_user, db41_password, db41_database, 0, NULL, 0)) 
	{
		zlog_error(zlogc,"%s", mysql_error(MQ_CON));
		return NULL;
	}
	return MQ_CON;
}
int mysql_cn_exit_pthread(MYSQL * MQ_CON)
{
	mysql_close(MQ_CON);
	mysql_thread_end();
	return 0;
}

void pthread_1(void* para)
{
	MYSQL *MQ_CON=NULL;
	MQ_CON=mysql_cn_init_pthread();
	//数据库操作
	
	//数据库操作结束
	mysql_cn_exit_pthread(MQ_CON);
}

网上还有一种说法,如果前面一种行不通,可以试试这个,估计也差不多
在主线程中:

 mysql_library_init(0, NULL, NULL);
 mysql_library_end()

其他线程中:
初始化:

mysql_thread_init();
MYSQL *mysql = mysql_init(NULL);

关闭:

mysql_close(mysql);
mysql_thread_end();

好了,就写到这吧。
在这里插入图片描述

以上就是最新一期更新的内容。感谢收看。

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖哥王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值