Heim  >  Artikel  >  Datenbank  >  linux下操作mysql,支持重连_MySQL

linux下操作mysql,支持重连_MySQL

WBOY
WBOYOriginal
2016-05-31 08:48:38971Durchsuche

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn