免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1242 | 回复: 0
打印 上一主题 下一主题

MYSQL c API相关问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-14 07:11 |只看该作者 |倒序浏览
  1. 1 #include<stdio.h>
  2.   2 #include<stdlib.h>
  3.   3 #include<mysql.h>
  4.   4 #include<string.h>
  5.   5

  6. 24 int main(){
  7. 25         char* DBName = "judge";
  8. 26         MYSQL *conn_ptr;

  9. 28         conn_ptr = mysql_init(NULL);
  10. 29         conn_ptr =   mysql_real_connect(conn_ptr,"localhost","root","hjhlovehf",DBName,0,NULL,0);
  11. 30
  12. 31         MYSQL_RES* res_answer;//保存从answer表中得到的数据
  13. 32         MYSQL_RES* res_user_answer;//保存从user_answer_order_prim表中得到的数据
  14. 33
  15. 34         int res;
  16. 35
  17. 36         char *selectUA = "select id,user_id,user_name,answer,status from user_answer_order_prim";
  18. 37         char *selectA = "select answer from answer1";
  19. 38         char insertUAP[128];//往user_answer_precision表中插入结果  如果声明为指针将出错
  20. 39
  21. 40         res = mysql_query(conn_ptr,selectUA);
  22. 41         if(res){
  23. 42                 fprintf(stderr,"select from user_answer_order_prim error:%s\n",mysql_error(conn_ptr));
  24. 43                 exit(EXIT_FAILURE);
  25. 44         }
  26. 45         else{
  27. 46                 res_user_answer = mysql_store_result(conn_ptr);
  28. 47                 printf("select %lu rows from user_answer_order_prim\n",(unsigned long)mysql_num_rows(res_user_answer));
  29. 48         }
  30. 49
  31. 50         MYSQL_ROW row_answer;
  32. 51         MYSQL_ROW row_user_answer;
  33. 52
  34. 53         int flag = 1;
  35. 54         row_user_answer = mysql_fetch_row(res_user_answer);
  36. 55         int count = 0;//代表人数
  37. 56         int hundred = 0;//每个人100条记录
  38. 57         int ten = 0;//每个人的100天记录分成10份
  39. 58         char* user_name;
  40. 59         char* user_id;
  41. 60         double precision[10];
  42. 61
  43. 62         while(count<76){
  44. 63
  45. 64                 res = mysql_query(conn_ptr,selectA);
  46. 65                 if(res){
  47. 66                         fprintf(stderr,"select from answer error:%s\n",mysql_error(conn_ptr));
  48. 67                         exit(EXIT_FAILURE);
  49. 68                 }
  50. 69                 else{
  51. 70                         res_answer=mysql_store_result(conn_ptr);
  52. 71                         printf("select %lu rows from answer\n",(unsigned long)mysql_num_rows(res_answer));
  53. 72                 }
  54. 73                 while(flag && hundred<100){
  55. 74
  56. 75                         if(hundred == 0){
  57. 76                                 user_id = row_user_answer[1];

  58. 78                                 user_name = row_user_answer[2];
  59. 79                         }
  60. 80                         double right = 0;
  61. 81                         while(ten<10){
  62. 82                                 if(!(row_answer=mysql_fetch_row(res_answer))){

  63. 84                                         break;
  64. 85                                 }
  65. 89                                 if(!strcmp(row_user_answer[3],row_answer[0])){
  66. 90                                         right++;
  67. 91                                 }
  68. 92                                 if(!(row_user_answer = mysql_fetch_row(res_user_answer))){
  69. 93                                         flag = 0;
  70. 94                                         break;
  71. 95                                 }
  72. 96                                 ten++;
  73. 97                                 hundred++;
  74. 98                         }
  75. 99                         precision[(hundred-1)/10] = right/10;
  76. 100                         ten =0;
  77. 101                 }

  78. 103                 count++;
  79. 104                 hundred=0;
  80. 105                 sprintf(insertUAP,"insert into user_answer_precision(user_id,user_name,one,two,three,four,five,six,seven,eight,nine,ten) values('%s','%s',%f,%f,%f,%f,%f,%f,%f,%f,%f,%f)",user_id    ,user_name,precision[0],precision[1],precision[2],precision[3],precision[4],precision[5],precision[6],precision[7],precision[8],precision[9]);
  81. 106 printf("%s\n",insertUAP);
  82. 107                 //mysql_data_seek(res_answer,0);//重置answer表结果集到第一行   
  83. 108                 mysql_free_result(res_answer);<span style="color: #FF0000;"><strong>//编译通过,运行是提示Segmentation fault</strong></span>
  84. 109                 res = mysql_query(conn_ptr,insertUAP);
  85. 110                 if(res){
  86. 111                         fprintf(stderr,"insert into user_answer_precision error:%s\n",mysql_error(conn_ptr));
  87. 112                 }
  88. 113                 int i;
  89. 114                 for(i = 0;i<10;i++){
  90. 115                         precision[i]=0;
  91. 116                 }
  92. 117         }
  93. 118
  94. 119
  95. 120         mysql_free_result(res_user_answer);
  96. 121         mysql_close(conn_ptr);

  97. 123         exit(EXIT_SUCCESS);
  98. 124
复制代码
以上程序编译通过,运行时出现Segmentation fault错误,一直没找到原因,本人对mysql c api不是很熟悉
调试时108行提示一下错误:
Program received signal SIGSEGV, Segmentation fault.
0x00641b81 in mysql_free_result () from /usr/lib/mysql/libmysqlclient.so.15

有人碰到过这种情况吗?有的话麻烦告知,还有就是运用mysql c api的时候有什么需要特别注意的?

最后想问一下关于mysql中统一中文编码问题,能不能给个详细的设置步骤。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP