【MySQL】mysql C/C++ connect

发布于:2025-09-09 ⋅ 阅读:(19) ⋅ 点赞:(0)

【MySQL】mysql C/C++ connect

makefile

在这里插入图片描述

test.cc

#include <iostream>
#include <mysql/mysql.h>

//链接参数
const std::string host = "127.0.0.1";
const std::string user = "connector";
const std::string passward = "123456";//测试,东西啥也没有
const std::string db_name = "mysql_conn";
const unsigned int port = 3306;

int main()
{
    // std::cout << mysql_get_client_info() << std::endl;
    //初始化mysql_init(),要使用库,必须先进行初始化!
    MYSQL *my = mysql_init(nullptr);
    if (my == nullptr)
    {
        std::cerr << "mysql init error" << std::endl;
        return 2;
    }
    //先链接数据库
    if (mysql_real_connect(my, host.c_str(), user.c_str(), passward.c_str(), db_name.c_str(), port, nullptr, 0) == nullptr)
    {
        std::cerr << "mysql connect error" << std::endl;
        return 3;
    }

    //增删查改
    // std::string sql = "update fortest set name='zhangsan' where id = 1";
    // std::string sql = "insert into fortest values(2,'王五');";
    // std::string sql = "delete from fortest where name = 'lishi';";
    std::string sql = "select * from fortest;";

    //下发mysql命令mysql_query  
    int n = mysql_query(my, sql.c_str());
    if (n == 0)
    {
        std::cout << sql << "success:" << n << std::endl;
        ;
    }
    else
    {
        std::cout << "mysql_query fail:" << n << std::endl;
        return 4;
    }

    //表结构,属性,内容转存于res,select查询结果显示
    //回MYSQL_RES 变量,该变量主要用于保存查询的结果
    //函数mysql_store_result(),malloc了一片内存空间来存储查询过来的数据,所以一定要记的 free(result),不然会造成内存泄漏
    MYSQL_RES *res = mysql_store_result(my);
    if (nullptr == res)
    {
        std::cerr << "mysql_store_result error";
        return 5;
    }

    //表的行,列
    int rows = mysql_num_rows(res);//获取结果行数mysql_num_rows
    int fields = mysql_num_fields(res);//获取结果列数mysql_num_fields

    std::cout << "行:" << rows << std::endl;
    std::cout << "列:" << fields << std::endl;

    //表的列属性
    MYSQL_FIELD *field_array = mysql_fetch_field(res);//获取列名mysql_fetch_fields

    for(int i = 0; i < fields; i++)
    {
        std::cout << field_array[i].name << "\t";
    }
    std::cout << std::endl;

    //表内容
    for(int i = 0; i < rows; i++)
    {
        MYSQL_ROW row = mysql_fetch_row(res);//获取结果内容mysql_fetch_row  MYSQL_ROW就是char **
        for(int j = 0; j < fields; j++)
        {
            std::cout << row[j] << "\t";
        }
        std::cout << "\n";
    }
    
    //
    std::cout << "database_name: " << field_array[0].db << std::endl;
    std::cout << "table_name: " << field_array[0].table << std::endl;
    // while(true)
    // {
    //     std::cout << "MYSQL sql:" << std::endl;
    //     if(!std::getline(std::cin, sql) || sql == "quit")
    //     {
    //         std::cerr << "failed / quit" << std::endl;
    //         break;
    //     }

    //     int n = mysql_query(my, sql.c_str());
    //     if(n == 0)
    //     {
    //         std::cout << sql << "success:" << n << std::endl;;
    //     }
    //     else
    //     {
    //         std::cout << "mysql_query fail:" << n << std::endl;
    //     }
    // }

    //释放mysql_store_result开辟的空间
    mysql_free_result(res);

    
    mysql_close(my);

    return 0;
}

网站公告

今日签到

点亮在社区的每一天
去签到