Mysql 8.0 C API连接和获取数据实例(附解决乱码的彩蛋)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Mysql 8.0 C API连接和获取数据实例(附解决乱码的彩蛋)

假装前言

使用Mysql的C API,编写一个连接Mysql数据库实例的代码。

安装Mysql C API

这个有点麻烦,如果Windows平台下的Mysql Installer的话,安装个Mysql Server。相关的头件,库文件在如下 的目录下面。
image.png

实例代码

人好话不多,直接上代码。

#include <iostream>
#include <assert.h>
#include "mysql.h"
#pragma comment(lib, "libmysql.lib")

int main(int argc, char* argv[])
{
    MYSQL *pMysql = mysql_init(NULL);
    if ( NULL == pMysql )
    {
        printf("%s: %d : error : %s\n",__FILE__,  __LINE__, mysql_error(pMysql));
        exit(1);
    }
    if ( NULL == mysql_real_connect(pMysql, "x.x.x.x", "user", "password", "database", 3306, NULL, 0) )
    {
        printf("%s: %d : error : %s\n", __FILE__, __LINE__, mysql_error(pMysql));
        exit(1);
    }
    if ( NULL != mysql_set_character_set(pMysql, "utf8") )
    {
        printf("%s: %d : error : %s\n", __FILE__, __LINE__, mysql_error(pMysql));
        exit(1);
    }
    if ( NULL != mysql_real_query(pMysql, "select * from sys_user", strlen("select * from sys_user")) )
    {
        printf("%s: %d : error : %s\n", __FILE__, __LINE__, mysql_error(pMysql));
        exit(1);
    }
    MYSQL_RES* res = mysql_store_result(pMysql);
    if (NULL == res )
    {
        printf("%s : %d : error : %s\n", __FILE__, __LINE__, mysql_error(pMysql));
        exit(1);
    }

    // Handling result set retrieved from database table.
 
    // Retrieve meta data information.
    MYSQL_FIELD* myfields;
    while (myfields = mysql_fetch_field(res))
    {
        printf("%s", myfields->name);
        printf(" | ");
    }
    printf("\n"); 
    printf("--------------------------------------------------------------------------------------------------------\n");

    // Retrieve cell value of each row.
    int cols = 0;
    cols = mysql_num_fields(res);
    MYSQL_ROW row;
    while ( row = mysql_fetch_row(res) )
    {
        for ( int i = 0; i < cols; i++ )
        {
            if (row[i] != NULL)
            {
                // To display correctly. use chcp 65001.
                SetConsoleOutputCP(65001);
                size_t nSize = strlen(row[i]);
                char*pC = (char*)malloc(sizeof(char) * nSize + 2);
                assert(pC != NULL);
                memset(pC, 0, nSize+2);
                strncpy_s(pC, nSize+2, row[i], 5120);
                printf("%s", row[i]);
            }
            else
            {
                printf("NULL");
            }

            printf("|");
        }
        printf("\n");
    }

    mysql_free_result(res);
    mysql_close(pMysql);
}

文末彩蛋,解决prinf打印乱码的问题

开始调试和运行后,发现中文字符内容在console中,打印出来的一直是乱码,即使设置了mysql_set_character_set(pMysql, "utf8")。定位后发现,Mysql C API在获取结果时,通过printf打印乱码的原因是,用于输出的console控制台的code page不一致导致无法正确显示UTF8编码的内容。按以下方式(仅在windows平台),设置console的code page代码页,即可正常显示中文字符。

// To display correctly. use chcp 65001.
SetConsoleOutputCP(65001);
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
数据采集 数据可视化 前端开发
怎么通过API获取电竞赛事实时数据
选择合适的电竞数据API是开发电竞应用的关键。主流API包括OP.GG、Liquipedia、Stratz、Riot Games和熊猫比分,涵盖LOL、DOTA2等游戏的实时数据。注册并获取API密钥后,需仔细阅读文档,了解资源、请求方法、必需参数及响应格式。编写代码调用API时,注意优化请求频率,避免封禁。最后,通过Web界面或可视化工具展示数据,如React/D3.js、Tableau等。示例代码展示了如何使用熊猫比分API获取即将开始的比赛信息。
|
8天前
|
数据采集 监控 数据挖掘
常用电商商品数据API接口(item get)概述,数据分析以及上货
电商商品数据API接口(item get)是电商平台上用于提供商品详细信息的接口。这些接口允许开发者或系统以编程方式获取商品的详细信息,包括但不限于商品的标题、价格、库存、图片、销量、规格参数、用户评价等。这些信息对于电商业务来说至关重要,是商品数据分析、价格监控、上货策略制定等工作的基础。
|
26天前
|
API 网络安全
发送UDP数据免费API接口教程
此API用于向指定主机发送UDP数据,支持POST或GET请求。需提供用户ID、密钥、接收IP及端口、数据内容等参数。返回状态码和信息提示。示例中含公共ID与KEY,建议使用个人凭证以提高调用频率。
45 13
|
26天前
|
网络协议 API 网络安全
发送TCP数据免费API接口教程
此API用于向指定主机发送TCP数据,支持POST/GET请求,需提供用户ID、KEY、接收IP、端口及数据内容。返回状态码和信息提示,示例如下:{&quot;code&quot;:200,&quot;msg&quot;:&quot;发送成功!&quot;}。详情见:https://www.apihz.cn/api/datacstcp.html
36 11
|
26天前
|
API 数据安全/隐私保护 开发者
实时获取小红书详情 API 数据
小红书详情API数据获取指南:注册开发者账号,创建应用并申请接口权限,构建请求获取笔记详情,使用Python等语言处理响应数据。需遵守使用规则,注意调用频率和数据安全。
|
25天前
|
关系型数据库 MySQL 网络安全
DBeaver连接MySQL提示Access denied for user ‘‘@‘ip‘ (using password: YES)
“Access denied for user ''@'ip' (using password: YES)”错误通常与MySQL用户权限配置或网络设置有关。通过检查并正确配置用户名和密码、用户权限、MySQL配置文件及防火墙设置,可以有效解决此问题。希望本文能帮助您成功连接MySQL数据库。
40 4
|
1月前
|
XML 数据可视化 API
商品详情数据实战案例,API接口系列
淘宝商品详情数据在电商领域具有广泛的应用价值,而淘宝商品详情API接口则为开发者提供了获取这些数据的重要途径。通过合理利用这些接口和数据,可以提升业务效率、优化用户体验,为电商行业的发展注入新的活力。
|
12天前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
60 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
|
7天前
|
前端开发 API 数据库
Next 编写接口api
Next 编写接口api

推荐镜像

更多