c语言 linux 下连接 mysql 增删改查

使用 c语言连接处理 oracle 数据库的时候,是使用的 oracle 提供的 proc 方案,而 mysql 则提供了一系列函数,我们需要包含 mysql 的头文件  mysql.h 和连接 mysql 的一些库才能正确的使用他的 api。下面的示例包含了连接、查询、使用游标获取数据、获取结果集列头、错误处理等方法,请参考代码和注释。


代码实现

#include <stdio.h>
#include <mysql.h>

int main(int argc, char* argv[])
{
	unsigned int err;
	// 初始化 mysql 句柄
	MYSQL* mysql;
	mysql = mysql_init(NULL);
	
	if (mysql == NULL)
	{
		err = mysql_errno(mysql);
		printf("mysql_init error, code = %d\n", err);
		return err;
	}
	
	// 连接服务器,数据库句柄、地址、用户名、密码、数据库名
	mysql = mysql_real_connect(mysql, "127.0.0.1", "root", "******", "mydb61", 0, NULL, 0);
	if (NULL == mysql)
	{
		err = mysql_errno(mysql);
		printf("mysql_real_connect error, code = %d\n", err);
		return err;
	}
	
	// 执行 sql 语句,如果要查询包含二进制数据的,要用 mysql_real_query
	err = mysql_query(mysql, "select * from emp;");
	if (err != 0)
	{
		err = mysql_errno(mysql);
		printf("mysql_query error, code = %d\n", err);
		return err;
	}
	
	// 获取查询出来的数据有多少个列
	unsigned int num, i = 0;
	num = mysql_field_count(mysql);
	
	// 获取结果集
	MYSQL_RES* result;
	result = mysql_store_result(mysql);
	if (NULL == result)
	{
		err = mysql_errno(mysql);
		printf("mysql_query error, code = %d\n", err);
		return err;
	}
	
	/*
	与 mysql_field_count() 功能一致,但 mysql_field_count() 是返回上一次执行语句(query)结果列的数目
	而 mysql_num_fields() 是从结果集中获取返回列数
	*/

	// 获取表头内容
	MYSQL_FIELD *fields;
	fields = mysql_fetch_fields(result);
	for(i = 0; i < num; i++)
	{
	   printf("%8s\t", fields[i].name);
	}
	putchar(10);
	
	// 读取结果集
	MYSQL_ROW row;
	while ((row = mysql_fetch_row(result)))
	{
		for (i = 0; i < num; i++)
		{
			printf("%8s\t", row[i]);
		}
		putchar(10);
	}
	
	mysql_free_result(result);
	// 关闭 mysql 句柄
	mysql_close(mysql);
	return 0;
}

编译程序

编译程序:gcc 02_mysql_hello.c -o 02_mysql_hello -I /usr/include/mysql -L /usr/lib64/mysql -l mysqlclient -l stdc++ -l pthread -l dl -l rt

运行结果

2015-07-27_214742

 

评论