Maison  >  Article  >  base de données  >  linux下操作mysql,支持重连_MySQL

linux下操作mysql,支持重连_MySQL

WBOY
WBOYoriginal
2016-05-31 08:48:38971parcourir

bitsCN.com

(一)code

#include

#include

#include

#include

#include

#include

#define MAX_QUERY_LEN 1024

#define MAX_QUERY_COUNT 2

#define PRINT_MYSQL_ERROR(mysql) fprintf(stderr, "mysql-error:%s/n", mysql_error(mysql))

typedef struct prop_global{

  MYSQL *mysql;

  char *db_host;

  char *db_user;

  char *db_pwd;

  char *db_name;

  char query[MAX_QUERY_LEN];

  int order_id;  

}prop_global_t;

static prop_global_t *g_p;

int prop_init(const char *host, const char *user, const char *pwd, const char *db){

   prop_global_t *y=(prop_global_t *) malloc( sizeof(*y));

  

   y->mysql = mysql_init(NULL);

   if( NULL == y->mysql ){

       PRINT_MYSQL_ERROR( y->mysql );

       return -1;

   }

 //  printf("mysql %s, %s, %s, %s/n", host, user, pwd, db);

   if( NULL == mysql_real_connect( y->mysql, host, user, pwd, db, 0, NULL, 0 ) ){

        PRINT_MYSQL_ERROR( y->mysql );

       return -1;

   }

   

   y->db_host = strdup(host);

   y->db_user = strdup(user);

   y->db_pwd  = strdup(pwd );

   y->db_name = strdup( db);

   y->order_id = 1;

   g_p = y;

   //printf("mysql init ok/n");

   return 0;

}

int safe_query( prop_global_t *y, const char *query, int len){

   int i;

   int errno;

   //printf("sql: %d %s/n", len, query );

   for( i=0; i

      errno = mysql_real_query(y->mysql, query, len);

      switch( errno ){

      case 0: return 0;

      case CR_SERVER_GONE_ERROR:

      case CR_SERVER_LOST:

           mysql_close( y->mysql );

           y->mysql = mysql_init(NULL);

           if( NULL == mysql_real_connect( y->mysql, y->db_host, y->db_user, y->db_pwd, y->db_name, 0, NULL, 0 ) ){

               PRINT_MYSQL_ERROR( y->mysql );

                return -1;

           }

           break;

      default:

           PRINT_MYSQL_ERROR( y->mysql );

           return -1;

      }

   }

   return -1;

}

int get_lzddz_num(void){

    int n;

    int rownum = 0;

    //MYSQL_ROW row;

    MYSQL_RES *res = NULL;

    prop_global_t *y = g_p;

    int r = -1;

    n = snprintf(y->query, MAX_QUERY_LEN , "select userid,matchid,matchseq ,userseq , score, state, takecoin , token, signupcond,site, rtime from t_jj_user_match where  matchid = 6684674 or matchid = 6684675 or  matchid = 6684676" );

    if( safe_query(y, y->query, n )){

        printf("err:%d/n", __LINE__);  return r;

    }

    

    res = mysql_store_result(y->mysql);

    if( NULL == res ){

         printf("err:%d/n", __LINE__); return r;

    }

    

    rownum = mysql_num_rows( res );

    /*

    printf("lzddz num = %d/n", rownum );

    if( rownum > 0 ){

        while( (row = mysql_fetch_row(res) ) ) {

            printf("%d/t", atoi( row[0] )); //userid

            printf("%d/t", atoi( row[1] )); //matchid

            printf("%d/t", atoi( row[2] )); //matchseq

            printf("%d/t", atoi( row[3] )); //userseq

            printf("%d/t", atoi( row[4] )); //score

            printf("%d/t", atoi( row[5] )); //state

            printf("%d/t", atoi( row[6] )); //takecoin

            printf("%d/t", atoi( row[7] )); //token

            printf("%d/t", atoi( row[8] )); //signupcond

            printf("%d/t", atoi( row[9] )); //site

            printf("%d/t", atoi( row[10] )); // rtime

            printf("/n");

        }

    }

    */

    mysql_free_result(res);

    system("date"); 

    printf("lzddz num = %d/n", rownum );  

  

   return rownum;

}

void prop_release( void ){

    prop_global_t *y = g_p;

    mysql_close( y->mysql );

    free( y->db_host);

    free( y->db_user);

    free( y->db_pwd );

    free( y->db_name);

}

int main(void){

   int ret = 0;

   ret = prop_init( "41.15.11.59", "lhm", "1234567lhm", "db_jj");

   if( 0 == ret ){

       get_lzddz_num();

       prop_release(); 

   }

   return 0;

}

(二)Makefile

[lvhongmin@AY1401201736089361adZ database]$ cat Makefile

FLAGS = -O2 -g -Wpointer-arith -Wstrict-prototypes -lm -W -Wall

LIB = -lpthread -lmysqlclient

INCLUDE_PATH = /usr/include/mysql

CC = gcc

all:lhm.exe

lhm.exe:lhm_query.c

        $(CC) -o $@ ${LIB} ${FLAGS} -L /usr/lib64/mysql -I ${INCLUDE_PATH} lhm_query.c

clean:

        rm lhm.exe 

bitsCN.com

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn