使用 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