欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

linux下操作mysql,支持重连_MySQL

程序员文章站 2022-04-16 20:07:48
...
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