使用 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
运行结果