mysql.sdk.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. /******************************************************************
  2. ** Copyright (c) 2007-2008 Wuhan Mozit Technology Co., Ltd .
  3. ** FileName: mysql.sdk.c
  4. ** Author: BigHead
  5. ** Mail: jsrenyw@sohu.com
  6. ** Date : 2009-8-21 下午07:17:32
  7. ** Version: 2009-8-21
  8. ** File Description: 操作数据库的封装函数
  9. ******************************************************************/
  10. #include "../include/mysql.sdk.h"
  11. /******************************************************************
  12. * Function Name: initMysqlAccount
  13. * Arguments:
  14. * Return Value: int
  15. * Date: 2007-6-2
  16. * Description: 数据库账号初始化函数,必须在使用任何sql之前调用
  17. * 同一进程,只需要调用一次,建议在main中启动时候调用
  18. *
  19. ******************************************************************/
  20. int initMysqlAccount(char *dataFile)
  21. {
  22. //char MYSQL_SERVERIP[32]= "localhost";
  23. //char MYSQL_USERID[32]= "user";
  24. //char MYSQL_PASSWD[64]= "pwd";
  25. //char MYSQL_DATABASE[32]= "dbname";
  26. char result[260] = {0};
  27. memcpy(result, GetInitKey(dataFile, "MYSQL", "SERVERIP"), 256);
  28. if (strlen(result))
  29. memcpy(MYSQL_SERVERIP, result, 256);
  30. memcpy(result, GetInitKey(dataFile, "MYSQL", "USERID"), 256);
  31. if (strlen(result))
  32. memcpy(MYSQL_USERID, result, 256);
  33. memcpy(result, GetInitKey(dataFile, "MYSQL", "PASSWD"), 256);
  34. if (strlen(result))
  35. memcpy(MYSQL_PASSWD, result, 256);
  36. memcpy(result, GetInitKey(dataFile, "MYSQL", "DATABASE"), 256);
  37. if (strlen(result))
  38. memcpy(MYSQL_DATABASE, result, 256);
  39. return 0;
  40. }
  41. int mysqlConnetInit(MYSQL *_mysql)
  42. {
  43. mysql_init(_mysql);
  44. if (!mysql_real_connect(_mysql, MYSQL_LOGIN_STRING, 0, NULL, 0))
  45. {
  46. printf("mysqlConnetInit:ERROR PANIC: CANNOT CONNECT MYSQL DATABASE!!!\n database -1: %s\n", mysql_error(_mysql));
  47. exit(1);
  48. }
  49. printf("mysqlConnetInit:succ MYSQL_SERVERIP=%s MYSQL_DATABASE=%s \n", MYSQL_SERVERIP, MYSQL_DATABASE);
  50. //设置字符编码
  51. mysql_set_character_set(_mysql,"utf8");
  52. return 0;
  53. }
  54. /******************************************************************
  55. * Function Name: excuteSql
  56. * Arguments: MYSQL*, char[]
  57. * Return Value: int
  58. * Date: 2009-8-24
  59. * Description: 执行SQL语句,如果失败,自动重练sql数据库2次
  60. ******************************************************************/
  61. int excuteSql(MYSQL *mysql, char sqlChar[1024])
  62. {
  63. int ret;
  64. //log("SQL:%s", sqlChar);
  65. ret = mysql_real_query(mysql, sqlChar, (unsigned int)strlen(sqlChar));
  66. if (ret)
  67. {
  68. printf("Error making query-11: %s %s ret=%d\n", mysql_error(mysql), sqlChar, ret);
  69. //edit by liuqing 20180529 反正失败的时候也不多 这么判断下应该没什么问题吧
  70. if (!strncasecmp(mysql_error(mysql), "MySQL server has gone away", strlen("MySQL server has gone away")))
  71. {
  72. ret = CR_SERVER_GONE_ERROR;
  73. }
  74. if ((ret == CR_SERVER_GONE_ERROR) || (ret == CR_SERVER_LOST))
  75. {
  76. /* 释放临时空间,防止内存泄漏 2006-11-13 16:25:40 */
  77. /* Mysql 重新初始化初始化 2006-11-13 16:30:15 */
  78. //第一次重新连接数据库
  79. mysql_close(mysql);
  80. mysql_init(mysql);
  81. sleep(2);
  82. if (!mysql_real_connect(mysql, MYSQL_LOGIN_STRING, 0, NULL, 0))
  83. {
  84. printf("Error Reconnecting to database -1: %s\n", mysql_error(mysql));
  85. }
  86. else
  87. {
  88. //设置字符编码 20210319新增,避免数据库连接断开后中文乱码
  89. mysql_set_character_set(mysql,"utf8");
  90. ret = mysql_real_query(mysql, sqlChar, (unsigned int)strlen(sqlChar));
  91. }
  92. if ((ret == CR_SERVER_GONE_ERROR) || (ret == CR_SERVER_LOST))
  93. {
  94. printf("Error making query-22: %s ret=%d\n", mysql_error(mysql), ret);
  95. /* 释放临时空间,防止内存泄漏 2006-11-13 16:25:40 */
  96. /* Mysql 重新初始化初始化 2006-11-13 16:30:15 */
  97. //第二次重新连接数据库
  98. mysql_close(mysql);
  99. mysql_init(mysql);
  100. sleep(2);
  101. if (!mysql_real_connect(mysql, MYSQL_LOGIN_STRING, 0, NULL, 0))
  102. {
  103. printf("Error Reconnecting to database -2: %s\n", mysql_error(mysql));
  104. }
  105. else
  106. {
  107. //设置字符编码 20210319新增,避免数据库连接断开后中文乱码
  108. mysql_set_character_set(mysql,"utf8");
  109. ret = mysql_real_query(mysql, sqlChar, (unsigned int)strlen(sqlChar));
  110. }
  111. }
  112. }
  113. }
  114. return ret;
  115. }
  116. //edit by liuqing 20180320 新加一个不带日志的
  117. int excuteSql2(MYSQL *mysql, char sqlChar[512])
  118. {
  119. int ret;
  120. //log("SQL:%s\n", sqlChar);
  121. ret = mysql_real_query(mysql, sqlChar, (unsigned int)strlen(sqlChar));
  122. if (ret)
  123. {
  124. printf("Error making query-111: %s %s ret=%d\n", mysql_error(mysql), sqlChar, ret);
  125. //edit by liuqing 20180529 反正失败的时候也不多 这么判断下应该没什么问题吧
  126. if (!strncasecmp(mysql_error(mysql), "MySQL server has gone away", strlen("MySQL server has gone away")))
  127. {
  128. ret = CR_SERVER_GONE_ERROR;
  129. }
  130. if ((ret == CR_SERVER_GONE_ERROR) || (ret == CR_SERVER_LOST))
  131. {
  132. /* 释放临时空间,防止内存泄漏 2006-11-13 16:25:40 */
  133. /* Mysql 重新初始化初始化 2006-11-13 16:30:15 */
  134. //第一次重新连接数据库
  135. mysql_close(mysql);
  136. mysql_init(mysql);
  137. sleep(2);
  138. if (!mysql_real_connect(mysql, MYSQL_LOGIN_STRING, 0, NULL, 0))
  139. {
  140. printf("Error Reconnecting to database -1: %s\n", mysql_error(mysql));
  141. }
  142. else
  143. {
  144. ret = mysql_real_query(mysql, sqlChar, (unsigned int)strlen(sqlChar));
  145. }
  146. if ((ret == CR_SERVER_GONE_ERROR) || (ret == CR_SERVER_LOST))
  147. {
  148. printf("Error making query-222: %s ret=%d\n", mysql_error(mysql), ret);
  149. /* 释放临时空间,防止内存泄漏 2006-11-13 16:25:40 */
  150. /* Mysql 重新初始化初始化 2006-11-13 16:30:15 */
  151. //第二次重新连接数据库
  152. mysql_close(mysql);
  153. mysql_init(mysql);
  154. sleep(2);
  155. if (!mysql_real_connect(mysql, MYSQL_LOGIN_STRING, 0, NULL, 0))
  156. {
  157. printf("Error Reconnecting to database -2: %s\n", mysql_error(mysql));
  158. }
  159. else
  160. {
  161. ret = mysql_real_query(mysql, sqlChar, (unsigned int)strlen(sqlChar));
  162. }
  163. }
  164. }
  165. }
  166. return ret;
  167. }