linux下操作mysql,支持重连_MySQL
bitsCN.com (一)code #include <stdio.h> #include <stdlib.h> #include <string.h> #include <mysql/mysql.h> #include <mysql/errmsg.h> #include <sys/time.h> #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<MAX_QUERY_COUNT; 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 |