Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4826940
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: Mysql/postgreSQL

2010-05-02 10:53:53

                                                                      自己写的两个例子

1、db_mysql_sample1.c

/****************************************************************************
文件名:db_mysql_sample1.c
说明:
    1、这个例子从数据库中读出数据并打印出来(BLOB型数据不可以),该方法将各种数据格式化后以字符串
       的形式保存在MYSQL_ROW中。
    2、函数名表:
    ----------------------------------------------------------------
       函数名                        功能
    ----------------------------------------------------------------
       Connect_Server                连接服务器
       Execute                       执行查询语句,结果存入MYSQL_RES对象中
       Select_Row                    从查询的结果集中取出某一行,格式化为字符串,存入MYSQL_ROW结构中
       Next_Row                      从查询的结果集中取出下一行,格式化为字符串,存入MYSQL_ROW结构中
       Free_result                   释放结果集占用的内存空间
       Mysql_Close                   关闭与数据库的连接,并释放内存
    ------------------------------------------------------------------
    3、一般执行顺序:
       ConnectServer-->Execute-->Select_Row或者Next_Row取结果-->Free_result-->Mysql_Close
      
****************************************************************************/

#include
#include
#include
#include
#include
#include
#include
#include
#include

#define BUFFER_SIZE 1000000
#define bool int
#define true 1
#define false 0

bool Connect_Server(MYSQL **sql,char *host,char *user,char *passwd,char *dbname)
{
        my_bool b = 0;
        if(!(*sql=mysql_init(NULL)))
        {
                printf("%s\n",mysql_error(*sql));
                return 0;
        }
        mysql_options(*sql,MYSQL_REPORT_DATA_TRUNCATION,&b);
        if(!mysql_real_connect(*sql,host,user,passwd,dbname,0,"//home//mysql//mysql.sock",0))
        {
                fprintf(stderr,"%s\n",mysql_error(*sql));
                return 0;
        }
        return 1;// true;
}

bool Execute(MYSQL *mysql,MYSQL_RES **res,char *query,int length)
{
if(length!=0)
{
   if(mysql_real_query(mysql,query,length))
   {
    printf("query error!\n");
    return false;
   }
}
else
{
   if(mysql_query(mysql,query))
   {
    printf("query error!\n");
    return false;
   }
}
*res = mysql_store_result(mysql);
if(!*res)
{
   if(mysql_field_count(mysql)>0)
   {
    printf("store_result error!");
    return false ;
   }

}
return true;
}

bool Select_Row(MYSQL_ROW *row,MYSQL_RES *res,my_ulonglong num_row)
{
if(num_row>mysql_num_rows(res)||num_row<0)
{
   printf("Select row error!");
   return false;
}
mysql_data_seek(res,num_row);
*row=mysql_fetch_row(res);
if(*row==NULL)
{
   printf("fetch_row error!");
   return false;
}
return true;
}

bool Next_Row(MYSQL_ROW *row,MYSQL_RES *res)
{
*row=mysql_fetch_row(res);
if(*row==NULL)
{
   printf("fetch_row error!");
   return false;
}
return true;
}

unsigned long Num_Rows(MYSQL_RES *res)
{
return (unsigned long)mysql_num_rows(res);
}

void Free_result(MYSQL_RES *res)
{
mysql_free_result(res);
}

void Mysql_Close(MYSQL *sql)
{
        mysql_close(sql);
}

int main(void)
{
char query[200];
//STEP 1:定义变量  
///////////定义mysql对象变量
MYSQL *mysql;
MYSQL_RES *res;
MYSQL_ROW row;
/////////////////////////////////////////////////////////////////////////////////////

//STEP 2:连接数据库
//其中:
//"202.122.33.53",是服务器地址;
//"guest"和"guestpass",分别是用户名和密码;
//"offlinedb",是服务器中数据库的名字
if(!Connect_Server(&mysql,"202.122.33.53","guest","guestpass","offlinedb"))
{
   return 0;
}

//////////////////////////////////////////////////////////////////////////////////////
       
//STEP 3:查询
////////设置查询语句.
//其中:
//"DedxCalConst",是表的名字;
//"ser_no",是表中数据类型为int型的列;
//"resolcalib",是该表中数据类型为longblob的一列;
strcpy(query,"SELECT ser_no FROM DedxCalConst");
/////////执行查询
if(!Execute(mysql,&res,query,0))
{
   return 0;
}
///////////////////////////////////////////////////////////////////////////////////////

//STEP 4:逐行取得查询结果,并将其打印出来     
printf("%d rows in result.\n",Num_Rows(res));

if(Select_Row(&row,res,100))
{
   printf("num 100 row:ser_no=%s\n",row[0]);
}

getchar();
printf("\nGo on search in result...\n");

while(Next_Row(&row,res))
{
   printf("ser_no=%s\n",row[0]);
}

        Free_Result(res);
////////////////////////////////////////////////////////////////////////////////////////

//STEP 5:断开连接
Mysql_Close(mysql);
}

2、db_mysql_sample2.c

/****************************************************************************
文件名:db_mysql_sample2.c
说明:
    1、这些以Stmt开头的函数,可以将数据库中数据项存入一定类型的变量中,这些变量的类型应该与数据库中数据项类型相匹配,
       但是,操作有点麻烦。如果仅仅是想把数据打印出来(BLOB型数据不可以),则参见db_mysql_sample1.c,不需用这些函数。
    2、函数相关说明,参见word文档;
    3、函数名表:
    ----------------------------------------------------------------
       函数名                        功能
    ----------------------------------------------------------------
       ConnectServer                 连接服务器
       Stmt_Init                     初始化Stmt
       Stmt_Prepare_Search           绑定您的查询语句
       Stmt_Execute                  执行查询
       Stmt_Set_Bind                 设置您用来接收查询结果的变量
       Stmt_Bind_Result              变量与结果集连接
       Stmt_Data_Fetch               指定某一行写入指定变量
       Stmt_Data_Fetch_Next          将结果集内的下一行写入变量
       Stmt_Num_Rows                 返回结果集中有多少行
    ------------------------------------------------------------------
    4、一般执行顺序:
       ConnectServer-->Stmt_Init-->Stmt_Execute-->Stmt_Set_Bind-->
       Stmt_Bind_Result-->Stmt_Data_Fetch或Stmt_Data_Fetch_Next
      
****************************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define BUFFER_SIZE 1000000
#define bool int
#define true 1
#define false 0
bool ConnectServer(MYSQL **sql,char *host,char *user,char *passwd,char *dbname)
{
        my_bool b = 0;
        if(!(*sql=mysql_init(NULL)))
        {
                printf("%s\n",mysql_error(*sql));
                return 0;
        }
        mysql_options(*sql,MYSQL_REPORT_DATA_TRUNCATION,&b);
        if(!mysql_real_connect(*sql,host,user,passwd,dbname,0,"//home//mysql//mysql.sock",0))
        {
                fprintf(stderr,"%s\n",mysql_error(*sql));
                return 0;
        }
        return 1;// true;
}
bool Stmt_Init(MYSQL *sql,MYSQL_STMT **stmt)
{
        *stmt = mysql_stmt_init(sql);
        if(!(*stmt))
        {
                printf("stmt_init() error!\n%s",mysql_stmt_error(*stmt));
                return false;
        }
        if(!(*stmt))
        {
                printf("stmt_init() error!\n%s",mysql_stmt_error(*stmt));
                return false;
        }
        return true;
}
bool Stmt_Prepare_Search(MYSQL *sql,MYSQL_STMT **stmt,char *query)
{
        unsigned count;
        MYSQL_RES *res;
        if(sql==NULL)
        {
                printf("Must connect server first!!");
                return false;
        }

        if(mysql_stmt_prepare(*stmt,query,strlen(query)))
        {
                printf("stmt_perpare()!\n");
                printf("%s\n",query);
                return false;
        }

        ///Get parameter count
        count=mysql_stmt_param_count(*stmt);
        if(count!=0)
        {
                printf("parameter count error!");
                return false;
        }

        //Get MYSQL_RES
        res = mysql_stmt_result_metadata(*stmt);
        if(!res)
        {
                printf("Get MYSQL_RES error!");
                return false;
        }

        //Column in result
        //column_count = mysql_num_fields(res);
        //printf("res column = %d\n",column_count);
        return true;
}
bool Stmt_Execute(MYSQL_STMT *stmt)
{
        if(mysql_stmt_execute(stmt))
        {
                printf("Excecute()!");
                return false ;
        }
        else return true ;
}

void Stmt_Set_Bind(MYSQL_BIND *bind,enum enum_field_types ft,char *buffer,unsigned long *length,\
                        my_bool *is_null,unsigned long buffer_length)
{
memset(bind,0,sizeof(bind));
        bind->buffer_type = ft;
        bind->buffer = buffer;
        bind->is_null = is_null;
        bind->length = length;
        if(buffer_length!=0)
        {
                bind[0].buffer_length = buffer_length;
        }
}

bool Stmt_Bind_Result(MYSQL_STMT *stmt,MYSQL_BIND *bind)
{
        if(mysql_stmt_bind_result(stmt,bind))
        {
                printf("bind_result() !");
                return false;
        }
        if(mysql_stmt_store_result(stmt))
        {
                printf("store_reslut() !");
                return false;
        }
        return true;
}
bool Stmt_Data_Fetch(MYSQL_STMT *stmt,my_ulonglong row)
{
        mysql_stmt_data_seek(stmt,row);
        if(mysql_stmt_fetch(stmt))
        {
                return false ;
        }
        return true;
}

bool Stmt_Data_Fetch_Next(MYSQL_STMT *stmt)
{
        if(mysql_stmt_fetch(stmt))
        {
                return false ;
        }
        return true;
}

unsigned long Stmt_Num_Rows(MYSQL_STMT * stmt)
{
        return mysql_stmt_num_rows(stmt);
}

void Stmt_Close(MYSQL_STMT *stmt)
{
        mysql_stmt_close(stmt);
}

void Mysql_Close(MYSQL *sql)
{
        mysql_close(sql);
}

int main(void)
{
        char query[300];

//STEP 1:定义变量  
///////////定义mysql对象变量
MYSQL *mysql;
MYSQL_STMT *stmt;
MYSQL_BIND bind[2];

///////////保存读出数据项的变量
//其中:                                              
//data_size[0]将返回数据项长度,单位是字节;         
//bb,用来保存返回的longblob数据;                    
//data_int,用来保存返回的int型数据;               
//is_null,说明数据项是否为空。                    
unsigned long data_size[2];                
char bb[BUFFER_SIZE];                   
int data_int;                               
char str[21];                             
my_bool is_null[2];                          
/////////////////////////////////////////////////////////////////////////////////////

//STEP 2:连接数据库
//其中:
//"202.122.33.53",是服务器地址;
//"guest"和"guestpass",分别是用户名和密码;
//"offlinedb",是服务器中数据库的名字
        if(!ConnectServer(&mysql,"202.122.33.53","guest","guestpass","offlinedb"))
       {
                return 0;
        }
//////////////////////////////////////////////////////////////////////////////////////
       
//STEP 3:查询
////////初始化stmt对象
        if(!Stmt_Init(mysql,&stmt)) return 0;

////////设置查询语句.
//其中:
//"DedxCalConst",是表的名字;
//"ser_no",是表中数据类型为int型的列;
//"resolcalib",是该表中数据类型为longblob的一列;
        strcpy(query,"SELECT ser_no,wiregcalib FROM DedxCalConst WHERE ser_no=100");

/////////绑定查询语句和stmt对象
        if(!Stmt_Prepare_Search(mysql,&stmt,query)) return 0;

/////////执行查询
        if(!Stmt_Execute(stmt)) return 0;
///////////////////////////////////////////////////////////////////////////////////////


//STEP 4:将查询结果存入指定变量(数据类型要一致)
/////////设置MYSQL_BIND的结构体
        Stmt_Set_Bind(&bind[0],MYSQL_TYPE_LONG,(char *)&data_int,&data_size[0],&is_null[0],4);
        Stmt_Set_Bind(&bind[1],MYSQL_TYPE_LONG_BLOB,&bb[0],&data_size[1],&is_null[1],BUFFER_SIZE);

/////////将设置好的MYSQL_BIND结构体和这次查询连接起来
        if(!Stmt_Bind_Result(stmt,bind)) return 0;

////////逐行取得查询结果,并将其打印出来       
        while(Stmt_Data_Fetch_Next(stmt))
        {
   int i;
        printf("ser_no=%d\t",data_int);
   printf("wiregcalib(show 20bytes in hex format)=");
   if(is_null[1])
   {
    printf("NULL\n");
   }
   else
   {
    for(i=0;i<19;i++)
    {
     printf("%x-",(unsigned char)bb[i]);
    }
           printf("%x\n",(unsigned char)bb[19]);
        }
        }
//////////////////////////////////////////////////////////////////////////////////////

//STEP 5:关闭对象
Stmt_Close(stmt);
Mysql_Close(mysql);
//////////////////////////////////////////////////////////////////////////////////////

        return 0;
}

阅读(971) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-06-01 06:23:47

MBT is based on Africa's indigenous people to create innovative walking barefoot, and wear this shoe can stimulate the body to relax the muscles so that the muscles of heat to be released, consumed calories, thus to achieve weight loss results. MBT's pursuit of beauty in order to satisfy customers, design a variety of styles, such as Mbt Chapa shoe, MBT Lami Shoe