首页 > 代码库 > linux下操作mysql,支持重连
linux下操作mysql,支持重连
(一)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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。