123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- /******************************************************************
- ** Copyright (c) 2007-2008 Wuhan Mozit Technology Co., Ltd .
- ** FileName: mysql.sdk.c
- ** Author: BigHead
- ** Mail: jsrenyw@sohu.com
- ** Date : 2009-8-21 下午07:17:32
- ** Version: 2009-8-21
- ** File Description: 操作数据库的封装函数
- ******************************************************************/
- #include "../include/mysql.sdk.h"
- /******************************************************************
- * Function Name: initMysqlAccount
- * Arguments:
- * Return Value: int
- * Date: 2007-6-2
- * Description: 数据库账号初始化函数,必须在使用任何sql之前调用
- * 同一进程,只需要调用一次,建议在main中启动时候调用
- *
- ******************************************************************/
- int initMysqlAccount(char *dataFile)
- {
- //char MYSQL_SERVERIP[32]= "localhost";
- //char MYSQL_USERID[32]= "user";
- //char MYSQL_PASSWD[64]= "pwd";
- //char MYSQL_DATABASE[32]= "dbname";
- char result[260] = {0};
- memcpy(result, GetInitKey(dataFile, "MYSQL", "SERVERIP"), 256);
- if (strlen(result))
- memcpy(MYSQL_SERVERIP, result, 256);
- memcpy(result, GetInitKey(dataFile, "MYSQL", "USERID"), 256);
- if (strlen(result))
- memcpy(MYSQL_USERID, result, 256);
- memcpy(result, GetInitKey(dataFile, "MYSQL", "PASSWD"), 256);
- if (strlen(result))
- memcpy(MYSQL_PASSWD, result, 256);
- memcpy(result, GetInitKey(dataFile, "MYSQL", "DATABASE"), 256);
- if (strlen(result))
- memcpy(MYSQL_DATABASE, result, 256);
- return 0;
- }
- int mysqlConnetInit(MYSQL *_mysql)
- {
- mysql_init(_mysql);
- if (!mysql_real_connect(_mysql, MYSQL_LOGIN_STRING, 0, NULL, 0))
- {
- printf("mysqlConnetInit:ERROR PANIC: CANNOT CONNECT MYSQL DATABASE!!!\n database -1: %s\n", mysql_error(_mysql));
- exit(1);
- }
- printf("mysqlConnetInit:succ MYSQL_SERVERIP=%s MYSQL_DATABASE=%s \n", MYSQL_SERVERIP, MYSQL_DATABASE);
- //设置字符编码
- mysql_set_character_set(_mysql,"utf8");
- return 0;
- }
- /******************************************************************
- * Function Name: excuteSql
- * Arguments: MYSQL*, char[]
- * Return Value: int
- * Date: 2009-8-24
- * Description: 执行SQL语句,如果失败,自动重练sql数据库2次
- ******************************************************************/
- int excuteSql(MYSQL *mysql, char sqlChar[1024])
- {
- int ret;
- //log("SQL:%s", sqlChar);
- ret = mysql_real_query(mysql, sqlChar, (unsigned int)strlen(sqlChar));
- if (ret)
- {
- printf("Error making query-11: %s %s ret=%d\n", mysql_error(mysql), sqlChar, ret);
- //edit by liuqing 20180529 反正失败的时候也不多 这么判断下应该没什么问题吧
- if (!strncasecmp(mysql_error(mysql), "MySQL server has gone away", strlen("MySQL server has gone away")))
- {
- ret = CR_SERVER_GONE_ERROR;
- }
- if ((ret == CR_SERVER_GONE_ERROR) || (ret == CR_SERVER_LOST))
- {
- /* 释放临时空间,防止内存泄漏 2006-11-13 16:25:40 */
- /* Mysql 重新初始化初始化 2006-11-13 16:30:15 */
- //第一次重新连接数据库
- mysql_close(mysql);
- mysql_init(mysql);
- sleep(2);
- if (!mysql_real_connect(mysql, MYSQL_LOGIN_STRING, 0, NULL, 0))
- {
- printf("Error Reconnecting to database -1: %s\n", mysql_error(mysql));
- }
- else
- {
- //设置字符编码 20210319新增,避免数据库连接断开后中文乱码
- mysql_set_character_set(mysql,"utf8");
- ret = mysql_real_query(mysql, sqlChar, (unsigned int)strlen(sqlChar));
- }
- if ((ret == CR_SERVER_GONE_ERROR) || (ret == CR_SERVER_LOST))
- {
- printf("Error making query-22: %s ret=%d\n", mysql_error(mysql), ret);
- /* 释放临时空间,防止内存泄漏 2006-11-13 16:25:40 */
- /* Mysql 重新初始化初始化 2006-11-13 16:30:15 */
- //第二次重新连接数据库
- mysql_close(mysql);
- mysql_init(mysql);
- sleep(2);
- if (!mysql_real_connect(mysql, MYSQL_LOGIN_STRING, 0, NULL, 0))
- {
- printf("Error Reconnecting to database -2: %s\n", mysql_error(mysql));
- }
- else
- {
- //设置字符编码 20210319新增,避免数据库连接断开后中文乱码
- mysql_set_character_set(mysql,"utf8");
- ret = mysql_real_query(mysql, sqlChar, (unsigned int)strlen(sqlChar));
- }
- }
- }
- }
- return ret;
- }
- //edit by liuqing 20180320 新加一个不带日志的
- int excuteSql2(MYSQL *mysql, char sqlChar[512])
- {
- int ret;
- //log("SQL:%s\n", sqlChar);
- ret = mysql_real_query(mysql, sqlChar, (unsigned int)strlen(sqlChar));
- if (ret)
- {
- printf("Error making query-111: %s %s ret=%d\n", mysql_error(mysql), sqlChar, ret);
- //edit by liuqing 20180529 反正失败的时候也不多 这么判断下应该没什么问题吧
- if (!strncasecmp(mysql_error(mysql), "MySQL server has gone away", strlen("MySQL server has gone away")))
- {
- ret = CR_SERVER_GONE_ERROR;
- }
- if ((ret == CR_SERVER_GONE_ERROR) || (ret == CR_SERVER_LOST))
- {
- /* 释放临时空间,防止内存泄漏 2006-11-13 16:25:40 */
- /* Mysql 重新初始化初始化 2006-11-13 16:30:15 */
- //第一次重新连接数据库
- mysql_close(mysql);
- mysql_init(mysql);
- sleep(2);
- if (!mysql_real_connect(mysql, MYSQL_LOGIN_STRING, 0, NULL, 0))
- {
- printf("Error Reconnecting to database -1: %s\n", mysql_error(mysql));
- }
- else
- {
- ret = mysql_real_query(mysql, sqlChar, (unsigned int)strlen(sqlChar));
- }
- if ((ret == CR_SERVER_GONE_ERROR) || (ret == CR_SERVER_LOST))
- {
- printf("Error making query-222: %s ret=%d\n", mysql_error(mysql), ret);
- /* 释放临时空间,防止内存泄漏 2006-11-13 16:25:40 */
- /* Mysql 重新初始化初始化 2006-11-13 16:30:15 */
- //第二次重新连接数据库
- mysql_close(mysql);
- mysql_init(mysql);
- sleep(2);
- if (!mysql_real_connect(mysql, MYSQL_LOGIN_STRING, 0, NULL, 0))
- {
- printf("Error Reconnecting to database -2: %s\n", mysql_error(mysql));
- }
- else
- {
- ret = mysql_real_query(mysql, sqlChar, (unsigned int)strlen(sqlChar));
- }
- }
- }
- }
- return ret;
- }
|