mysql_connect.cc 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #include <iostream>
  2. #include <string>
  3. #include <mysql/mysql.h>
  4. using std::cout;
  5. using std::endl;
  6. int main()
  7. {
  8. // 1. 初始化mysql句柄
  9. // MYSQL *mysql_init(MYSQL *mysql)
  10. MYSQL *mysql = mysql_init(nullptr);
  11. if(mysql == nullptr)
  12. {
  13. cout << "mysql init failed" << endl;
  14. return -1;
  15. }
  16. // 2. 连接mysql数据库
  17. // MYSQL *mysql_real_connect(...)
  18. const std::string host = "127.0.0.1";
  19. const std::string user = "thj";
  20. const std::string password = "Abcd1234@";
  21. const std::string db = "gobang";
  22. unsigned int port = 4106;
  23. mysql = mysql_real_connect(mysql, host.c_str(), user.c_str(), password.c_str(), db.c_str(), port, nullptr, 0);
  24. if(mysql == nullptr)
  25. {
  26. cout << "connection mysql server failed" << endl;
  27. mysql_close(mysql);
  28. return -1;
  29. }
  30. // 3. 设置客户端字符集
  31. // int mysql_set_character_set(MYSQL *mysql, const char *csname)
  32. if (mysql_set_character_set(mysql, "utf8") != 0)
  33. {
  34. cout << "set client character failed: " << mysql_error(mysql) << endl;
  35. }
  36. // 4. 选择要操作的数据库
  37. // int mysql_select_db(MYSQL *mysql, const char *db)
  38. // mysql_select_db(mysql, db.c_str());
  39. // 5. 执行sql语句 -- 增删改
  40. // int mysql_query(MYSQL *mysql, const char *stmt_str)
  41. if(mysql_query(mysql, "insert into user values(null, '张三', 18, '11122223333')") != 0)
  42. {
  43. cout << "sql query failed: " << mysql_error(mysql) << endl;
  44. }
  45. // 6. 执行sql语句 -- 查询
  46. if (mysql_query(mysql, "select * from user") != 0)
  47. {
  48. cout << "sql query failed: " << mysql_error(mysql) << endl;
  49. }
  50. // 6.1 将查询结果转储到本地
  51. // MYSQL_RES *mysql_store_result(MYSQL *mysql)
  52. MYSQL_RES *res = mysql_store_result(mysql);
  53. if(res == nullptr)
  54. {
  55. cout << "store query result failed: " << mysql_error(mysql) << endl;
  56. mysql_close(mysql);
  57. return -1;
  58. }
  59. // 6.2 获取结果集的行数与列数
  60. // uint64_t mysql_num_rows(MYSQL_RES *result)
  61. // unsigned int mysql_num_fields(MYSQL_RES *result)
  62. int rowCount = mysql_num_rows(res);
  63. int colCount = mysql_num_fields(res);
  64. // 6.3 打印结果集中的列属性信息
  65. // MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result) 一次获取一列
  66. // MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result) 一次获取全部
  67. for(int i = 0; i < colCount; i++)
  68. {
  69. // 自动迭代
  70. MYSQL_FIELD *field = mysql_fetch_field(res);
  71. cout << field->name << '\t';
  72. }
  73. cout << endl;
  74. // 一次获取全部列字段的属性信息,然后分别打印
  75. // MYSQL_FIELD *total_fields = mysql_fetch_fields(res);
  76. // for(int i = 0; i < colCount; i++)
  77. // {
  78. // cout << total_fields[i].name << '\t';
  79. // }
  80. // cout << endl;
  81. // 6.4 打印结果集中的行内容
  82. // MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
  83. for(int i = 0; i < rowCount; i++)
  84. {
  85. // 一行的所有内容 -- 自动迭代
  86. MYSQL_ROW row = mysql_fetch_row(res);
  87. for(int j = 0; j < colCount; j++)
  88. {
  89. // 一行内容中的某一列的内容
  90. cout << row[j] << '\t';
  91. }
  92. cout << endl;
  93. }
  94. // 7. 释放结果集
  95. mysql_free_result(res);
  96. // 8. 关闭mysql连接
  97. mysql_close(mysql);
  98. return 0;
  99. }