请选择 进入手机版 | 继续访问电脑版
查看: 411|回复: 0

[软件工程] linux c MySQL代码(参考)

686

主题

686

帖子

2071

积分

猿er

Rank: 1

积分
2071
发表于 2016-8-14 17:53:06
Linux下c链接mysql数据库添删改查
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. #include <mysql/mysql.h>//包含MySQL头文件
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8. void connect_mysql(MYSQL * mysql ,char * str[],MYSQL **connect);
  9. void insert_mysql(MYSQL * mysql);
  10. void delete_mysql(MYSQL * mysql);
  11. void update_mysql(MYSQL * mysql);
  12. void select_mysql(MYSQL * mysql,MYSQL **connect);
  13. void show_table(MYSQL * mysql,MYSQL **connect);
  14. void set_char(MYSQL * mysql);
  15. void menu();
  16. void quit(MYSQL **connect);
  17. int main(int argc,char *argv[])
  18. {
  19. MYSQL mysql, *connect = NULL;
  20. char *str[] = {argv[1],argv[2],argv[3]};
  21. connect_mysql(&mysql,str,&connect);
  22. menu();
  23. quit(&connect);
  24. return 0;
  25. }
  26. void set_char(MYSQL *mysql)//设置数据库的字符集 要先做
  27. {
  28. int i = mysql_query(mysql,"set names utf8");//向mysql服务器端发送指令
  29. //成功则返回0,失败则返回非0数据
  30. if(i != 0)
  31. {
  32. printf("set char fail!!\n");
  33. return;
  34. }
  35. }
  36. void select_mysql(MYSQL *mysql,MYSQL **connect)
  37. {
  38. if(!mysql)
  39. return;
  40. else{
  41. write(1,"Input select SQL:\n",strlen("Input select SQL:\n"));
  42. char select_sql[256];
  43. int n=0;
  44. memset(select_sql,0,sizeof(select_sql));
  45. for(n;;n++)//读取标准输入直到;在去除;
  46. {
  47. select_sql[n]=getchar();
  48. if(select_sql[n] == ';')
  49. {
  50. select_sql[n]=0;
  51. break;
  52. }
  53. }
  54. char * SQL = select_sql;
  55. int i = mysql_query(mysql,SQL);
  56. if(i != 0 )
  57. {
  58. printf("Update SQL fail %s \n",mysql_error(mysql));
  59. return;
  60. }else
  61. printf("Update SQL success\n");
  62. }
  63. MYSQL_RES *res = mysql_store_result(mysql);//返回结果集放入MYSQL_RES中
  64. int num_fields = mysql_num_fields(res);//查看结果集中行数
  65. MYSQL_ROW row;
  66. while((row = mysql_fetch_row(res)))//检索一个结果集合的下一行。当在mysql_store_result()之后使用时,
  67. //没有更多的行可检索时,mysql_etch_row()返回NULL
  68. {
  69. int i;
  70. for(i=0;i<num_fields;i++)
  71. {
  72. printf("%s\n",row[i]);
  73. }
  74. }
  75. mysql_free_result(res);//必须清空结果集########
  76. }
  77. void show_table(MYSQL *mysql,MYSQL **connect)
  78. {
  79. int i = mysql_query(mysql,"show tables");
  80. if(i != 0)
  81. return;
  82. else{
  83. MYSQL_RES * result = mysql_store_result(*connect);
  84. int num_fields = mysql_num_fields(result);
  85. MYSQL_ROW row;
  86. while((row = mysql_fetch_row(result)))
  87. {
  88. int i;
  89. for(i=0;i<num_fields;i++)
  90. {
  91. char *SQL;
  92. sprintf(SQL,"desc %s",row[i]);
  93. int n = mysql_query(mysql,SQL);
  94. MYSQL_RES * res= mysql_store_result(*connect);
  95. //可以调用mysql_fetch_row()来获取结果集中的行,或调用mysql_row_seek()
  96. //和mysql_row_tell()来获取或设置结果集中的当前行位置。
  97. //一旦完成了对结果集的操作,必须调用mysql_free_result()。
  98. int table_num = mysql_num_fields(res);
  99. MYSQL_ROW row1;
  100. while((row1 = mysql_fetch_row(res)))
  101. {
  102. int j;
  103. for(j=0;j<table_num;j++)
  104. {
  105. printf("%s\n",row1[j]);
  106. }
  107. }
  108. mysql_free_result(res);
  109. }
  110. }
  111. mysql_free_result(result);
  112. }
  113. }
  114. void update_mysql(MYSQL *mysql)
  115. {
  116. if(!mysql)
  117. return;
  118. else{
  119. write(1,"Input update SQL:\n",strlen("Input update SQL:\n"));
  120. char update_sql[256];
  121. int n=0;
  122. memset(update_sql,0,sizeof(update_sql));
  123. for(n;;n++)
  124. {
  125. update_sql[n]=getchar();
  126. if(update_sql[n] == ';')
  127. {
  128. update_sql[n]=0;
  129. break;
  130. }
  131. }
  132. char * SQL = update_sql;
  133. int i = mysql_query(mysql,SQL);
  134. if(i != 0 )
  135. {
  136. printf("Update SQL fail %s \n",mysql_error(mysql));
  137. return;
  138. }else
  139. printf("Update SQL success\n");
  140. }
  141. }
  142. void delete_mysql(MYSQL *mysql)
  143. {
  144. if(!mysql)
  145. return;
  146. else{
  147. write(1,"Input delete SQL:\n",strlen("Input delete SQL:\n"));
  148. char delete_sql[256];
  149. int n=0;
  150. memset(delete_sql,0,sizeof(delete_sql));
  151. for(n;;n++)
  152. {
  153. delete_sql[n]=getchar();
  154. if(delete_sql[n] == ';')
  155. {
  156. delete_sql[n]=0;
  157. break;
  158. }
  159. }
  160. char * SQL = delete_sql;
  161. int i = mysql_query(mysql,SQL);
  162. if(i != 0 )
  163. {
  164. printf("Delete SQL fail %s \n",mysql_error(mysql));
  165. return;
  166. }else
  167. printf("Delete SQL success\n");
  168. }
  169. }
  170. void insert_mysql(MYSQL *mysql)
  171. {
  172. if(!mysql)
  173. return;
  174. else{
  175. write(1,"Input insert SQL:\n",strlen("Input insert SQL:\n"));
  176. char insert_sql[256];
  177. int n=0;
  178. memset(insert_sql,0,sizeof(insert_sql));
  179. for(n;;n++)
  180. {
  181. insert_sql[n]=getchar();
  182. if(insert_sql[n] == ';')
  183. {
  184. insert_sql[n]=0;
  185. break;
  186. }
  187. }
  188. char * SQL = insert_sql;
  189. int i = mysql_query(mysql,SQL);
  190. if(i != 0 )
  191. {
  192. printf("Insert SQL fail %s \n",mysql_error(mysql));
  193. return;
  194. }else
  195. printf("Insert SQL success\n");
  196. }
  197. }
  198. void connect_mysql(MYSQL *mysql,char *str[],MYSQL **connect)
  199. {
  200. char passwd[256];
  201. memset(passwd,0,sizeof(passwd));
  202. write(1,"passwd:",strlen("passwd:"));
  203. scanf("%s",passwd);
  204. passwd[strlen(passwd)]=0;
  205. mysql_init(mysql);
  206. *connect = mysql_real_connect(mysql,str[1],str[2],passwd,str[3],0,0,0);
  207. if(*connect == NULL)
  208. {
  209. printf("Connect database fail! %s\n",mysql_error(mysql));
  210. return;
  211. }else{
  212. printf("Connect success!\n");
  213. }
  214. }
  215. void quit(MYSQL **connect)
  216. {
  217. mysql_close(*connect);
  218. *connect = NULL;
  219. printf("Bye\n");
  220. exit(1);
  221. }
  222. void menu()
  223. {
  224. printf("###########################\n");
  225. printf(" A -> SELECT:\n");
  226. printf(" B -> UPDATE:\n");
  227. printf(" C -> DELETE:\n");
  228. printf(" D -> INSERT:\n");
  229. printf(" E -> DESC TABLE:\n");
  230. printf(" Q -> QUIT:\n");
  231. printf("###########################\n");
  232. write(1,"Input: ",strlen("Input: "));
  233. }
复制代码


回复

使用道具 举报