123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #include <iostream>
- #include <string>
- #include <mysql/mysql.h>
- using std::cout;
- using std::endl;
- int main()
- {
- // 1. 初始化mysql句柄
- // MYSQL *mysql_init(MYSQL *mysql)
- MYSQL *mysql = mysql_init(nullptr);
- if(mysql == nullptr)
- {
- cout << "mysql init failed" << endl;
- return -1;
- }
- // 2. 连接mysql数据库
- // MYSQL *mysql_real_connect(...)
- const std::string host = "127.0.0.1";
- const std::string user = "thj";
- const std::string password = "Abcd1234@";
- const std::string db = "gobang";
- unsigned int port = 4106;
- mysql = mysql_real_connect(mysql, host.c_str(), user.c_str(), password.c_str(), db.c_str(), port, nullptr, 0);
- if(mysql == nullptr)
- {
- cout << "connection mysql server failed" << endl;
- mysql_close(mysql);
- return -1;
- }
- // 3. 设置客户端字符集
- // int mysql_set_character_set(MYSQL *mysql, const char *csname)
- if (mysql_set_character_set(mysql, "utf8") != 0)
- {
- cout << "set client character failed: " << mysql_error(mysql) << endl;
- }
- // 4. 选择要操作的数据库
- // int mysql_select_db(MYSQL *mysql, const char *db)
- // mysql_select_db(mysql, db.c_str());
- // 5. 执行sql语句 -- 增删改
- // int mysql_query(MYSQL *mysql, const char *stmt_str)
- if(mysql_query(mysql, "insert into user values(null, '张三', 18, '11122223333')") != 0)
- {
- cout << "sql query failed: " << mysql_error(mysql) << endl;
- }
- // 6. 执行sql语句 -- 查询
- if (mysql_query(mysql, "select * from user") != 0)
- {
- cout << "sql query failed: " << mysql_error(mysql) << endl;
- }
- // 6.1 将查询结果转储到本地
- // MYSQL_RES *mysql_store_result(MYSQL *mysql)
- MYSQL_RES *res = mysql_store_result(mysql);
- if(res == nullptr)
- {
- cout << "store query result failed: " << mysql_error(mysql) << endl;
- mysql_close(mysql);
- return -1;
- }
- // 6.2 获取结果集的行数与列数
- // uint64_t mysql_num_rows(MYSQL_RES *result)
- // unsigned int mysql_num_fields(MYSQL_RES *result)
- int rowCount = mysql_num_rows(res);
- int colCount = mysql_num_fields(res);
- // 6.3 打印结果集中的列属性信息
- // MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result) 一次获取一列
- // MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result) 一次获取全部
- for(int i = 0; i < colCount; i++)
- {
- // 自动迭代
- MYSQL_FIELD *field = mysql_fetch_field(res);
- cout << field->name << '\t';
- }
- cout << endl;
- // 一次获取全部列字段的属性信息,然后分别打印
- // MYSQL_FIELD *total_fields = mysql_fetch_fields(res);
- // for(int i = 0; i < colCount; i++)
- // {
- // cout << total_fields[i].name << '\t';
- // }
- // cout << endl;
- // 6.4 打印结果集中的行内容
- // MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
- for(int i = 0; i < rowCount; i++)
- {
- // 一行的所有内容 -- 自动迭代
- MYSQL_ROW row = mysql_fetch_row(res);
- for(int j = 0; j < colCount; j++)
- {
- // 一行内容中的某一列的内容
- cout << row[j] << '\t';
- }
- cout << endl;
- }
- // 7. 释放结果集
- mysql_free_result(res);
- // 8. 关闭mysql连接
- mysql_close(mysql);
- return 0;
- }
|