[转载]MySQL 的 C API 简单用法
源:http://www.cnblogs.com/linbc/archive/2009/06/15/1503924.html
首先第一步,当然是去mysql网站下载一下C API的库文件以及头文件了
地址为http://dev.mysql.com/downloads/connector/c/6.0.html
无非也是几个数据结构以及几个函数
先看一下数据结构,如下
MYSQL- 这个结构表示对一个数据库连接的句柄,它被用于几乎所有的MySQL函数。
MYSQL_RES- 这个结构代表返回行的一个查询的(
SELECT,SHOW,DESCRIBE,EXPLAIN)的结果。从查询返回的信息在本章下文称为结果集合。 MYSQL_ROW- 这是一个行数据的类型安全(type-safe)的表示。当前它实现为一个计数字节的字符串数组。(如果字段值可能包含二进制数据,你不能将这些视为空终止串,因为这样的值可以在内部包含空字节) 行通过调用
mysql_fetch_row()获得。 MYSQL_FIELD- 这个结构包含字段信息,例如字段名、类型和大小。其成员在下面更详细地描述。你可以通过重复调用
mysql_fetch_field()对每一列获得MYSQL_FIELD结构。字段值不是这个结构的部分;他们被包含在一个MYSQL_ROW结构中。
然后介绍几个最常用的api函数
| mysql_affected_rows() | 返回被最新的UPDATE, DELETE或INSERT查询影响的行数。 |
| mysql_close() | 关闭一个服务器连接。 |
| mysql_errno() | 返回最近被调用的MySQL函数的出错编号。 |
| mysql_error() | 返回最近被调用的MySQL函数的出错消息。 |
| mysql_fetch_row() | 从结果集合中取得下一行。 |
| mysql_field_count() | 返回最近查询的结果列的数量。 |
| mysql_init() | 获得或初始化一个MYSQL结构。 |
| mysql_insert_id() | 返回有前一个查询为一个AUTO_INCREMENT列生成的ID。 |
| mysql_num_rows() | 返回一个结果集合中的行的数量。 |
| mysql_query() | 执行指定为一个空结尾的字符串的SQL查询。 |
| mysql_real_connect() | 连接一个MySQL服务器。 |
| mysql_real_query() | 执行指定为带计数的字符串的SQL查询。 |
然后最直观的看看代码吧!
1 // mysql_demo.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <my_global.h> 6 #include <mysql.h> 7 8 #pragma comment(lib,"mysqlclient.lib") 9 10 static char *opt_host_name = NULL; /**//*服务器主机名称 默认为localhost*/ 11 static char *opt_user_name = "root"; /**//*数据库用户名 默认为当前登录名*/ 12 static char *opt_password = NULL; /**//*密码 默认为空*/ 13 static uint opt_port_num = 0; /**//*端口 使用内建值*/ 14 static char *opt_socket_name = NULL; /**//*socket name (use build-in value)*/ 15 static char *opt_db_name = "luaRules"; /**//*数据库 名称 默认为空*/ 16 static uint opt_flags = 0; /**//*连接参数*/ 17 18 19 static MYSQL *conn; /**//*pointer to connection handler*/ 20 21 void print_error(MYSQL *conn, const char *title){ 22 fprintf(stderr,"%s:\nError %u (%s)\n",title,mysql_errno(conn),mysql_error(conn)); 23 } 24 25 void process_result_set(MYSQL *conn,MYSQL_RES *res_set){ 26 MYSQL_ROW row; 27 uint i; 28 29 while ((row = mysql_fetch_row(res_set)) != NULL){ 30 for(i=0;i<mysql_num_fields(res_set);i++){ 31 if (i > 0) 32 fputc('\t',stdout); 33 printf("%s",row[i] != NULL ? row[i] : "NULL"); 34 } 35 fputc('\n',stdout); 36 } 37 38 if(mysql_errno(conn) != 0) 39 print_error(conn,"mysql_fetch_row() failed"); 40 else 41 printf("%lu rows returned \n", 42 (ulong)mysql_num_rows(res_set)); 43 } 44 45 int _tmain(int argc, _TCHAR* argv[]) 46 { 47 /**//*初始化数据库指针*/ 48 if( (conn = mysql_init(NULL))== NULL){ 49 fprintf(stderr,"mysql 初始化失败(可能是内存溢出)!\n"); 50 exit(1); 51 } 52 /**//*连接到数据库*/ 53 if(mysql_real_connect(conn,opt_host_name,opt_user_name,opt_password, 54 opt_db_name,opt_port_num,opt_socket_name,opt_flags) == NULL){ 55 56 fprintf(stderr,"mysql_real_connect 失败:\nError %u (%s)\n", 57 mysql_errno(conn),mysql_error(conn)); 58 59 mysql_close(conn); 60 exit(1); 61 } 62 63 /**//*执行插入语句*/ 64 if(mysql_query(conn,"insert into t_services (ServiceID,ServiceName) values ('RULE_LINBC_001','demo1')")){ 65 print_error(conn,"执行插入失败"); 66 }else{ 67 printf("插入成功,受影响行数:%lu\n",(ulong)mysql_affected_rows(conn)); 68 } 69 70 /**//*查询*/ 71 if(mysql_query(conn,"select * from t_services")){ 72 print_error(conn,"mysql_query() error"); 73 }else{ 74 MYSQL_RES *res_set; 75 res_set = mysql_store_result(conn); /**//*生成结果集*/ 76 if(res_set == NULL) 77 print_error(conn,"mysql_store_result failed"); 78 else { 79 process_result_set(conn,res_set); 80 mysql_free_result(res_set); 81 } 82 } 83 84 /**//*断开*/ 85 mysql_close(conn); 86 87 getchar(); 88 return 0; 89 }
本文不是为了代替mysql的文档,只是一个小demo,详细的还是得看myql手册
库的安装及头文件路径的设置就不废话了

浙公网安备 33010602011771号