日期:2014-05-16  浏览次数:20441 次

MySQL学习笔记_13_Linux下C++/C连接MySQL数据库(三) --处理返回数据

LinuxC++/C连接MySQL数据库()

--处理返回数据


一、通过返回结果集中的字段数

unsigned int mysql_field_count(MYSQL * connection);
//将MYSQL_ROW的值作为一个存储了一行数据的数组...

示例:

//一次取一个值的情况,另一种情况与其类似,修改处会标出
#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;
}

二、获取一个字段的信息

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_l