Home  >  Article  >  Database  >  linux下操作mysql,支持重连_MySQL

linux下操作mysql,支持重连_MySQL

WBOY
WBOYOriginal
2016-05-31 08:48:38993browse

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn