#include<stdio.h> #include<stdlib.h> #include<mysql.h> int main(void) { //MYSQL 链接指针 MYSQL *conn_ptr; int res; //执行的查询语句 char querySql[100] = "select fname,age from children"; //得到查询结果集 MYSQL_RES *res_ptr; //得到的查询结果 MYSQL_ROW sqlrow; //初始化链接数据库 conn_ptr = mysql_init(NULL); if(!conn_ptr) { fprintf(stderr,"mysql init error\n"); exit(1); } //链接数据库 conn_ptr = mysql_real_connect(conn_ptr,"localhost", "root","123","test",0,NULL,0); if(conn_ptr) { printf("connect sucessful\n"); } else { printf("connect failture\n"); fprintf(stderr,"num is %d error is %s\n", //获得出错的行号和出错信息 mysql_errno(conn_ptr),mysql_error(conn_ptr)); exit(1); } //执行SQL查询语句,不得到结果。可以执行删除和插入 等 res = mysql_query(conn_ptr,querySql); if(0 == res) { printf("Data num is %d\n", //可以得到查询操作影响的行号 (int)mysql_affected_rows(conn_ptr)); } else { fprintf(stderr,"num is %d erros is %s\n", mysql_errno(conn_ptr),mysql_error(conn_ptr)); exit(1); } //得到查询操作的结果集 res_ptr = mysql_use_result(conn_ptr); if(res_ptr) { //处理每个结果,返回的是每行的结果 while((sqlrow = mysql_fetch_row(res_ptr))) { unsigned int num = 0; //对每行结果进行输出 while(num < mysql_field_count(conn_ptr)) { printf("row is:%s\n",sqlrow[num]); num++; } } } //释放结果集指针 mysql_free_result(res_ptr); //关闭数据库 mysql_close(conn_ptr); exit(0); }
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
MYSQL_RES *mysql_use_result(MYSQL *mysql)
对于成功检索数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN),必须调用mysql_store_result()或mysql_use_result()。mysql_use_result()将初始化结果集检索,但并不像mysql_store_result()那样将结果集实际读取到客户端。它必须通过对mysql_fetch_row()的调用,对每一行分别进行检索。这将直接从服务器读取结果,而不会将其保存在临时表或本地缓冲区内,与mysql_store_result()相比,速度更快而且使用的内存也更少。客户端仅为当前行和通信缓冲区分配内存,分配的内存可增加到max_allowed_packet字节。
在行中字段值的长度可以通过调用mysql_fetch_lengths()获得。空字段和包含NULL的字段长度都是 0;你可以通过检查该值的指针区分他们。如果指针是NULL,字段是NULL;否则字段是空的。
unsigned int mysql_field_count(MYSQL *mysql);
得到当前查询的数据库的表的列的数目,即这个表有多少列数据。
本文出自 “风清扬song” 博客,请务必保留此出处http://2309998.blog.51cto.com/2299998/1365989