当前位置:Gxlcms > mysql > linux下操作mysql,支持重连_MySQL

linux下操作mysql,支持重连_MySQL

时间:2021-07-01 10:21:17 帮助过:53人阅读

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

人气教程排行