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

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: Mysql/postgreSQL

2010-05-03 11:06:20

#include <stdio.h>
#include <unistd.h>
#include <mysql.h>
#include <stdlib.h>
#include <string.h>


#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,NULL,0))
        {
                fprintf(stderr,"%s\n",mysql_error(*sql));
                return 0;
        }
        return 1;// true;

}

bool Stmt_Init(MYSQL *sql,MYSQL_STMT **stmt)
{
     unsigned long prefetch_rows = 5;
    
        *stmt = mysql_stmt_init(sql);
        if(!(*stmt))
        {
                printf("stmt_init() error!\n%s",mysql_stmt_error(*stmt));
                return false;
        }
        #if 1
         mysql_stmt_attr_set(*stmt, STMT_ATTR_PREFETCH_ROWS,(void*) &prefetch_rows);
        #endif
        return true;
}

bool Stmt_Prepare_Search(MYSQL *sql,MYSQL_STMT **stmt,char *query)
{
        unsigned count;
        MYSQL_RES *res;
        if(sql==NULL)
        {
                printf("%s\n", "Must connect server first!!");
                return false;
        }

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

        ///Get parameter count

        count=mysql_stmt_param_count(*stmt);
        if(count!=0)
        {
                printf("%s\n", "parameter count error!");
                return false;
        }

        //Get MYSQL_RES

        res = mysql_stmt_result_metadata(*stmt);
        if(!res)
        {
                printf("%s\n", "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("%s\n", "Excecute()!");
                return false ;
        }
        else return true ;
}

//Stmt_Set_Bind(&bind[1],MYSQL_TYPE_TIMESTAMP,(char*)&ts,&data_size[1],&is_null[1],BUFFER_SIZE);

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(MYSQL_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;
        }
       // #endif

}

bool Stmt_Bind_Result(MYSQL_STMT *stmt,MYSQL_BIND *bind)
{
        if(mysql_stmt_bind_result(stmt,bind))
        {
                printf("%s\n", "bind_result() !");
                return false;
        }
        if(mysql_stmt_store_result(stmt))
        {
                printf("%s\n", "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))
        {
            //printf("%s\n", "mysql_stmt_fetch error");

          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: define varible


    MYSQL *mysql;
    MYSQL_STMT *stmt;
    MYSQL_BIND bind[2];

    //data_size[0] data len

    //bb, save blob data

    //data_int,save int type data

    //is_null, null or not


    unsigned long data_size[2];
    MYSQL_TIME ts;
    int data_int;
    my_bool is_null[2];
    /////////////////////////////////////////////////////////////////////////////////////


  //STEP 2:connect database

        if(!ConnectServer(&mysql, "127.0.0.1", "root", "123456", "test"))
       {
                return 0;
        }

  //STEP 3:query

  ////////init stmt object

  if(!Stmt_Init(mysql,&stmt)) return 0;

  ////////query.

  strcpy(query,"SELECT id,ts FROM info");

  /////////bind query cmd and stmt object

  if(!Stmt_Prepare_Search(mysql,&stmt,query)) return 0;
 
  /////////execute query

  if(!Stmt_Execute(stmt)) return 0;

  //STEP 4: save query res to defined varible

  /////////set MYSQL_BIND struct

  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_TIMESTAMP,(char*)&ts,&data_size[1],&is_null[1],BUFFER_SIZE);
 
  /////////bind MYSQL_BIND and query res

  if(!Stmt_Bind_Result(stmt,bind)) return 0;

  ////////fetch result

  while(Stmt_Data_Fetch_Next(stmt))
   {
      printf("ser_no=%d\n",data_int);
       if(is_null[1])
      printf("%s\n", "NULL\n");
    else
     printf("%04u-%02u-%02u %02u:%02u:%02u\n",ts.year, ts.month,ts.day, ts.hour, ts.minute, ts.second);
   }

  //STEP 5:close object

  Stmt_Close(stmt);
  Mysql_Close(mysql);

  return 0;
}


[kenthy@kenthy mysql]$ gcc -Wall -o mysql2 mysql2.c -I/usr/include/mysql/ -L/usr/lib/mysql/ -lmysqlclient -lz
[kenthy@kenthy mysql]$ ./mysql2
ser_no=1
2010-05-03 09:42:32
ser_no=2
2010-05-03 09:42:37
ser_no=3
2010-05-03 09:42:39
ser_no=4
2010-05-03 09:42:40
ser_no=5
2010-05-03 09:42:40
ser_no=6
2010-05-03 09:42:41
ser_no=7
2010-05-03 09:42:42
ser_no=8
2010-05-03 09:42:42
ser_no=9
2010-05-03 09:42:43
ser_no=10
2010-05-03 09:42:43


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

chinaunix网友2010-06-01 06:21:18

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