当前位置:Gxlcms > mysql > C连接MySQL数据库开发之Linux环境完整示例演示(增、删、改、查_MySQL

C连接MySQL数据库开发之Linux环境完整示例演示(增、删、改、查_MySQL

时间:2021-07-01 10:21:17 帮助过:35人阅读

一、开发环境

ReadHat6.332位、mysql5.6.15、gcc4.4.6

二、编译

gcc-I/usr/include/mysql-L/usr/lib-lmysqlclient main.c -o main.out

-I:指定mysql头文件所在目录(默认去/usr/include目录下寻找所用到的头文件)

-L:指定mysql动态库文件所在目录(默认从/usr/lib目录查找)

-l:链接libmysqlclient.so动态库

-o:生成的可执行文件名

三、完整示例

  1. ////main.c//mysql数据库编程////Created by YangXin on 14-5-22.//Copyright (c) 2014年 yangxin. All rights reserved.//#include <stdio.h>#include <stdlib.h>#include <string.h>#include <mysql.h>MYSQL mysql;// 查询int query();// 修改int update();// 添加数据my_ulonglong add();// 参数化添加数据my_ulonglong addByParams();// 删除数据my_ulonglong delete();// 打印数据库服务器信息void printMySqlInfo();int main(int argc, const char * argv[]){
  2. /*连接之前,先用mysql_init初始化MYSQL连接句柄*/
  3. mysql_init(&mysql);
  4. /*使用mysql_real_connect连接服务器,其参数依次为MYSQL句柄,服务器IP地址,
  5. 登录mysql的用户名,密码,要连接的数据库等*/
  6. if(!mysql_real_connect(&mysql, "localhost", "root", "yangxin", "test", 0, NULL, 0)) {
  7. printf("connecting to Mysql error:%d from %s/n",mysql_errno(&mysql), mysql_error(&mysql));
  8. return -1;
  9. }else {
  10. printf("Connected Mysql successful!/n");
  11. }
  12. printMySqlInfo();
  13. // 设置编码
  14. mysql_query(&mysql, "set names utf8");
  15. // 参数化添加数据
  16. addByParams();
  17. // 查询
  18. query();
  19. // 修改
  20. update();
  21. // 添加
  22. add();
  23. // 删除
  24. delete();
  25. /*关闭连接*/
  26. mysql_close(&mysql);
  27. return 0;}// 查询int query(){
  28. int flag, i;
  29. const char *sql = NULL;
  30. MYSQL_RES *res = NULL;
  31. MYSQL_ROW row = NULL;
  32. MYSQL_FIELD *fields = NULL;
  33. sql = "select * from t_user" ;
  34. flag = mysql_real_query(&mysql, sql, (unsigned int)strlen(sql));
  35. if (flag) {
  36. printf("query error:%d from %s/n",mysql_errno(&mysql),mysql_error(&mysql));
  37. return -1;
  38. }
  39. // 将查询结果读取到内存当中,如果数据很多的情况会比较耗内存
  40. res = mysql_store_result(&mysql);
  41. // res = mysql_use_result(&mysql); // 需要用到的时候,每次从服务器中读取一行
  42. // 字段数量
  43. unsigned int field_count = mysql_field_count(&mysql);
  44. printf("field_cout:%d/n",field_count);
  45. // 查询总数
  46. my_ulonglong rows = mysql_num_rows(res);
  47. printf("%lld/n",rows);
  48. // 获取所有字段
  49. fields = mysql_fetch_fields(res);
  50. for (int i = 0; i < mysql_num_fields(res); i++) {
  51. printf("%s/t", fields[i].name);
  52. }
  53. printf("/n");
  54. // 遍历结果集
  55. while((row = mysql_fetch_row(res)))
  56. {
  57. for (i = 0; i < mysql_num_fields(res); i++)
  58. {
  59. printf("%s/t",row[i]);
  60. }
  61. printf("/n");
  62. }
  63. // 释放结果集
  64. mysql_free_result(res);
  65. return 0;}// 修改int update(){
  66. const char *sql = NULL;
  67. int flag = -1;
  68. sql = "update t_user set name='lisi',age=20 where id=1";
  69. // 执行SQL指令
  70. flag = mysql_real_query(&mysql, sql, (unsigned int)strlen(sql));
  71. if (flag) {
  72. printf("update data error:%d from %s/n",mysql_errno(&mysql),mysql_error(&mysql));
  73. return-1;
  74. }
  75. printf("update success./n");
  76. return 0;}// 添加my_ulonglong add(){
  77. const char *sql = NULL;
  78. int flag = -1;
  79. sql = "insert into t_user(name,age,address) values ('zhangsan',40,'beijing')";
  80. // 执行
  81. flag = mysql_real_query(&mysql, sql, strlen(sql));
  82. if (flag) {
  83. printf("add data error:%d from %s/n",mysql_errno(&mysql),mysql_error(&mysql));
  84. return -1;
  85. }
  86. // 删除的行数
  87. my_ulonglong affected_rows = mysql_affected_rows(&mysql);
  88. // 新添加记录的ID
  89. my_ulonglong newid = mysql_insert_id(&mysql);
  90. printf("success add %lld record data, newid:%lld!/n",affected_rows,newid);
  91. return newid;}// 参数化添加my_ulonglong addByParams(){
  92. const char *sql = NULL;
  93. MYSQL_STMT *stmt = NULL;
  94. MYSQL_BIND bnd[3];// 占位符参数数量
  95. memset(&bnd, 0, sizeof(bnd));
  96. // 设置手动提交事务
  97. //mysql_autocommit(&mysql, 0);
  98. // 通过参数占位符的方式执行SQL
  99. sql = "insert into t_user(name,age,address) values (?,?,?)";
  100. stmt = mysql_stmt_init(&mysql);
  101. // 预处理SQL
  102. if(mysql_stmt_prepare(stmt, sql, (unsigned int)strlen(sql)))
  103. {
  104. fprintf(stderr, "mysql_stmt_prepare faild:%d from %s/n",
  105. mysql_stmt_errno(stmt),mysql_stmt_error(stmt));
  106. return -1;
  107. }
  108. // 封装占位符数据
  109. const char *name = "hanzhiqiang";
  110. bnd[0].buffer = (void *)name;
  111. bnd[0].buffer_type = MYSQL_TYPE_STRING;
  112. bnd[0].buffer_length = strlen(name);
  113. int age = 30;
  114. bnd[1].buffer = (void *)&age;
  115. bnd[1].buffer_length = sizeof(int);
  116. bnd[1].buffer_type = MYSQL_TYPE_LONG;
  117. const char *addres = "heimuer";
  118. bnd[2].buffer = (void *)addres;
  119. bnd[2].buffer_length = strlen(addres);
  120. bnd[2].buffer_type = MYSQL_TYPE_STRING;
  121. // 绑定占位符参数值
  122. if(mysql_stmt_bind_param(stmt, bnd))
  123. {
  124. fprintf(stderr, "mysql_stmt_bind_param faild:%d from %s/n",mysql_errno(&mysql), mysql_error(&mysql));
  125. return -2;
  126. }
  127. // 执行SQL
  128. if (mysql_stmt_execute(stmt)) {
  129. fprintf(stderr, "mysql_stmt_execute faild:%d from %s/n", mysql_errno(&mysql), mysql_error(&mysql));
  130. return -3;
  131. }
  132. // 关闭statement
  133. mysql_stmt_close(stmt);
  134. // 提交事务
  135. //mysql_commit(&mysql);
  136. // 事务回滚(在提交事务前)执行
  137. // mysql_rollback(&mysql);
  138. // 获取插入数据后,数据库受影响的记录数
  139. my_ulonglong newid = mysql_stmt_insert_id(stmt);
  140. printf("参数化语句插入新记录的id: %lld/n",newid);
  141. // 受影响的行数
  142. my_ulonglong affectedrows = mysql_stmt_affected_rows(stmt);
  143. printf("参数化语句插入受影响的行数:%lld/n",affectedrows);
  144. return newid;}my_ulonglong delete(){
  145. const char *sql = NULL;
  146. int flag = -1;
  147. sql = "delete from t_user where id > 10";
  148. flag = mysql_real_query(&mysql, sql, strlen(sql));
  149. if (flag) {
  150. printf("delete data error:%d from %s/n",mysql_errno(&mysql), mysql_error(&mysql));
  151. return -1;
  152. }
  153. my_ulonglong affected_rows = mysql_affected_rows(&mysql);
  154. printf("删除的行数:%lld/n",affected_rows);
  155. printf("success delete %lld record data !/n",affected_rows);
  156. return affected_rows;}void printMySqlInfo(){
  157. const char *stat = mysql_stat(&mysql);
  158. const char *server_info = mysql_get_server_info(&mysql);
  159. const char *clientInfo = mysql_get_client_info();
  160. unsigned long version =
  161. mysql_get_client_version();
  162. const char *hostinfo =
  163. mysql_get_host_info(&mysql);
  164. unsigned long serverversion = mysql_get_server_version(&mysql);
  165. unsigned int protoinfo = mysql_get_proto_info(&mysql);
  166. printf("stat:%s/n",stat);
  167. printf("server_info:%s/n",server_info);
  168. printf("clientInfo:%s/n",clientInfo);
  169. printf("version:%ld/n",version);
  170. printf("hostinfo:%s/n",hostinfo);
  171. printf("serverversion:%ld/n",serverversion);
  172. printf("protoinfo:%d/n",protoinfo);
  173. const char *charactername = mysql_character_set_name(&mysql);
  174. printf("client character set:%s/n",charactername);
  175. if (!mysql_set_character_set(&mysql, "utf8"))
  176. {
  177. printf("New client character set: %s/n",
  178. mysql_character_set_name(&mysql));
  179. }}</mysql.h></string.h></stdlib.h></stdio.h>

人气教程排行