| 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;}
 |