-- 处理返回数据
一、通过返回结果集中的字段数
[cpp] view plaincopyprint? unsigned int mysql_field_count(MYSQL * connection); //将MYSQL_ROW的值作为一个存储了一行数据的数组...unsigned int mysql_field_count(MYSQL * connection); //将MYSQL_ROW的值作为一个存储了一行数据的数组...
示例:
[cpp] view plaincopyprint? //一次取一个值的情况,另一种情况与其类似,修改处会标出 #include <iostream> #include <fstream> #include <cstdlib> #include <mysql/mysql.h> using namespace std; void mysql_err_function(MYSQL * connection); void mysql_display(MYSQL * mysql,MYSQL_ROW sqlrow); int main() { MYSQL * connection; connection = mysql_init(NULL); if (mysql_real_connect(connection, "localhost" , "root" , "123456" , "test" ,0,NULL,0)) { cout << "Connection to MySQL Server is Succeed..." << endl; string query = "select * from tmp15" ; //getline(cin,query); int res = mysql_query(connection,query.c_str()); if (res) { mysql_err_function(connection); } else { MYSQL_RES * my_res = mysql_use_result(connection); //将mysql_use_result改为mysql_store_result即可得到另一种情况的结果(其实是相同的...) if (my_res) { MYSQL_ROW sqlrow; while ((sqlrow = mysql_fetch_row(my_res))) { mysql_display(connection,sqlrow); } mysql_free_result(my_res); } else { mysql_err_function(connection); } } mysql_close(connection); cout << "Connection to MySQL Server is Closed!" << endl; } else { mysql_err_function(connection); } } void mysql_err_function(MYSQL * connection) { if (mysql_errno(connection)) { cout << "Error " << mysql_errno(connection) << " : " << mysql_error(connection) << endl; exit(-1); } } void mysql_display(MYSQL * mysql,MYSQL_ROW sqlrow) { for (unsigned int i = 0; i < mysql_field_count(mysql); ++i) { printf( "%s " ,sqlrow[i]); //cout << sqlrow[i] << ‘ ‘; //不知到为什么将printf换成cout之后,打印值就会出错...思考ing... } cout << endl; }//一次取一个值的情况,另一种情况与其类似,修改处会标出
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <mysql/mysql.h>
using namespace std;
void mysql_err_function(MYSQL * connection);
void mysql_display(MYSQL * mysql,MYSQL_ROW sqlrow);
int main()
{
MYSQL * connection;
connection = mysql_init(NULL);
if (mysql_real_connect(connection,"localhost","root","123456","test",0,NULL,0))
{
cout << "Connection to MySQL Server is Succeed..." << endl;
string query = "select * from tmp15";
//getline(cin,query);
int res = mysql_query(connection,query.c_str());
if (res)
{
mysql_err_function(connection);
}
else
{
MYSQL_RES * my_res = mysql_use_result(connection);
//将mysql_use_result改为mysql_store_result即可得到另一种情况的结果(其实是相同的...)
if (my_res)
{
MYSQL_ROW sqlrow;
while ((sqlrow = mysql_fetch_row(my_res)))
{
mysql_display(connection,sqlrow);
}
mysql_free_result(my_res);
}
else
{
mysql_err_function(connection);
}
}
mysql_close(connection);
cout << "Connection to MySQL Server is Closed!" << endl;
}
else
{
mysql_err_function(connection);
}
}
void mysql_err_function(MYSQL * connection)
{
if (mysql_errno(connection))
{
cout << "Error " << mysql_errno(connection) << " : "
<< mysql_error(connection) << endl;
exit(-1);
}
}
void mysql_display(MYSQL * mysql,MYSQL_ROW sqlrow)
{
for (unsigned int i = 0; i < mysql_field_count(mysql); ++i)
{
printf("%s ",sqlrow[i]);
//cout << sqlrow[i] << ' '; //不知到为什么将printf换成cout之后,打印值就会出错...思考ing...
}
cout << endl;
}
二、获取一个字段的信息
[cpp] view plaincopyprint? 1、MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result); 2、MYSQL_FIELD定义: typedef struct st_mysql_field { char *name; /* Name of column */ char *table; /* Table of column if column was a field */ char *org_table; /* Org table name if table was an alias */ char *db; /* Database for table */ char *def; /* Default value (set by mysql_list_fields) */ unsigned long length; /* Width of column */ unsigned long max_length; /* Max width of selected set */ unsigned int flags; /* Div flags */ unsigned int decimals; /* Number of decimals in field */ enum enum_field_types type; /* Type of field. Se mysql_com.h for types */ } MYSQL_FIELD; 3、IS_NUM宏,若字段类型是数字形式的,则返回真。 if (IS_NUM(mysql_field_ptr -> type)) { cout << "Number" << endl; } 4、MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES * result, MYSQL_FIELD_OFFSET offset); //函数将字段光标设置到给定的偏移量offset,下一次调用mysql_fetch_field将检索与该偏移量关联的列的字段定义。如果钥定位行的开始,则要传递一个值为0的offset值。1、MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result);
2、MYSQL_FIELD定义:
typedef struct st_mysql_field
{
char *name;
/* Name of column */
char *table;
/* Table of column if column was a field */
char *org_table;
/* Org table name if table was an alias */
char *db;
/* Database for table */
char *def;
/* Default value (set by mysql_list_fields) */
unsigned long length;
/* Width of column */
unsigned long max_length;
/* Max width of selected set */
unsigned int flags;
/* Div flags */
unsigned int decimals;
/* Number of decimals in field */
enum enum_field_types type;
/* Type of field. Se mysql_com.h for types */
} MYSQL_FIELD;
3、IS_NUM宏,若字段类型是数字形式的,则返回真。
if (IS_NUM(mysql_field_ptr -> type))
{
cout << "Number" << endl;
}
4、MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES * result,
MYSQL_FIELD_OFFSET offset);
//函数将字段光标设置到给定的偏移量offset,下一次调用mysql_fetch_field将检索与该偏移量关联的列的字段定义。如果钥定位行的开始,则要传递一个值为0的offset值。
示例:
[cpp] view plaincopyprint? #include <iostream> #include <fstream> #include <cstdlib> #include <mysql/mysql.h> using namespace std; void mysql_err_function(MYSQL * connection); //实现参照上例 void mysql_display(MYSQL * mysql,MYSQL_ROW sqlrow); //实现参照上例 void mysql_display_head(MYSQL_RES * my_res); int main() { MYSQL * connection; connection = mysql_init(NULL); if (mysql_real_connect(connection, "localhost" , "root" , "123456" , "test" ,0,NULL,0)) { cout << "Connection to MySQL Server is Succeed..." << endl; string query = "select * from tmp15" ; //getline(cin,query); int res = mysql_query(connection,query.c_str()); if (res) { mysql_err_function(connection); } else { MYSQL_RES * my_res = mysql_use_result(connection); if (my_res) { mysql_display_head(my_res); MYSQL_ROW sqlrow; cout << "Column Details:" << endl; while ((sqlrow = mysql_fetch_row(my_res))) { mysql_display(connection,sqlrow); } mysql_free_result(my_res); } else { mysql_err_function(connection); } } mysql_close(connection); cout << "Connection to MySQL Server is Closed!" << endl; } else { mysql_err_function(connection); } } void mysql_display_head(MYSQL_RES * my_res) { MYSQL_FIELD * my_field; cout << "Column Describe:" << endl; while ((my_field = mysql_fetch_field(my_res))) { cout << "\tName: " << my_field -> name << endl; cout << "\tType: " ; if (IS_NUM(my_field -> type)) { cout << "Numeric field" ; } else { switch (my_field -> type) { case FIELD_TYPE_VAR_STRING: cout << "Varchar" ; break ; case FIELD_TYPE_LONG: cout << "Long" ; break ; default : cout << "is " << my_field -> type << ",check in mysql.h" ; break ; } } cout << endl; cout << "\tMax width: " << my_field -> length << endl; if (my_field -> flags & AUTO_INCREMENT_FLAG) { cout << "\tAUTO_INCREMENT" << endl; } cout << endl; } }MySQL学习笔记_13_Linux下C++/C连接MySQL数据库(三) --处理返回数据
标签:c++ mysql c api 数据处理 select
查看更多关于MySQL学习笔记_13_Linux下C++/C连接MySQL数据库(三) --处理返回数据的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did118826