MySQL用C访问的示例代码

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: MySQL用C访问的示例代码

柳鲲鹏


有的朋友刚刚接触,不知道怎么用C访问。这里提供一个完整的示例代码。

#include <mysql.h>
#include "gh_mysql.h"
#include "gh_kit.h"
#define DB_TEST_QUERY       "select * from ai_task_tbl"
//这样能顺利取到错误。
static MYSQL    g_oDbConnection;
static MYSQL*   g_pDbConnection = NULL;
int db_connect(const char* server, const int port, const char* account, const char* password, const char* dbname)
{
    if (g_pDbConnection)
    {
        return 0;
    }
    GH_LOG_INFO("%s@%d, %s@%s, %s", server, port, account, password, dbname);
    g_pDbConnection = &g_oDbConnection;
    mysql_init(g_pDbConnection);
    if (!mysql_real_connect(g_pDbConnection, server, account, password, dbname, port, NULL, 0))
    {
        db_error();
        return -1;
    }
    GH_LOG_INFO("CONNECTED OK!");
    return 0;
}
int db_release()
{
    mysql_close(g_pDbConnection);
    g_pDbConnection = NULL;
    return 0;
}
int db_error()
{
    int error = mysql_errno(g_pDbConnection);
    if (error)
    {
        GH_LOG_INFO("ERROR! %d:%s", error, mysql_error(g_pDbConnection));
        db_release();
    }
    return error;
}
int db_query(const char* query)
{
    return 0;
}
int db_test()
{
    MYSQL_RES *sqlres;
    MYSQL_ROW sqlrow;
    MYSQL_FIELD* field;
    int num_fields;
    int counter = 0;
    char field1[32] = {0};
    char field2[32] = {0};
    int ret;
    if (!g_pDbConnection)
    {
        return -1;
    }
    ret = mysql_query(g_pDbConnection, DB_TEST_QUERY);
    if (ret)
    {
        return -1;
    }
    GH_LOG_INFO("mysql_affected_rows=%d", (int)mysql_affected_rows(g_pDbConnection));
    sqlres = mysql_store_result(g_pDbConnection);  
    if (!sqlres)
    {
        return -1;
    }
    GH_LOG_INFO("Retrieved %d rows", (int)mysql_num_rows(sqlres));
    num_fields = mysql_num_fields(sqlres);
    counter = 0;
    while((field = mysql_fetch_field(sqlres)))
    {
        GH_LOG_INFO("FIELD[%02d/%02d]=%s", counter, num_fields, field->name);
        if (counter == 0)
        {
            strcpy(field1, field->name);
        }
        else if (counter == 1)
        {
            strcpy(field2, field->name);
        }
        counter++;
    }
    //unsigned int mysql_field_count(MYSQL *connection);
    //MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result);
    counter = 0;
    while((sqlrow = mysql_fetch_row(sqlres)))
    {
        unsigned long *lengths;
        lengths = mysql_fetch_lengths(sqlres);
        //for(i = 0; i < num_fields && i < 10; i++)
        {
            GH_LOG_INFO("%s[%02d]=(%02d, %s), %s[%02d]=(%02d, %s)",
                field1, counter, (int) lengths[0], sqlrow[0] ? sqlrow[0] : "NULL",
                field2, counter, (int) lengths[1], sqlrow[1] ? sqlrow[1] : "NULL");
        }
        counter ++;
        if (counter >= 10)
        {
            break;
        }
    }
    mysql_free_result(sqlres);
    return 0;
}
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
安全 关系型数据库 数据管理
DMS产品常见问题之香港地区RDS开启安全访问代理失败如何解决
DMS(数据管理服务,Data Management Service)是阿里云提供的一种数据库管理和维护工具,它支持数据的查询、编辑、分析及安全管控;本汇总集中了DMS产品在实际使用中用户常遇到的问题及其相应的解答,目的是为使用者提供快速参考,帮助他们有效地解决在数据管理过程中所面临的挑战。
|
网络协议 关系型数据库 MySQL
如何实现无公网ip远程访问本地安卓Termux部署的MySQL数据库【内网穿透】
如何实现无公网ip远程访问本地安卓Termux部署的MySQL数据库【内网穿透】
|
网络协议 关系型数据库 MySQL
如何在Android Termux上安装MySQL并实现公网远程访问?
如何在Android Termux上安装MySQL并实现公网远程访问?
424 0
|
网络协议 关系型数据库 MySQL
如何使用宝塔面板搭建MySQL数据库并实现无公网IP远程访问
如何使用宝塔面板搭建MySQL数据库并实现无公网IP远程访问
1549 3
|
SQL DataWorks 关系型数据库
DataWorks产品使用合集之如何跨账号访问同一个MySQL
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
112 2
|
11月前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
1882 3
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
关系型数据库 MySQL 数据库连接
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
5837 52
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
|
关系型数据库 MySQL Serverless
Serverless 应用引擎产品使用合集之在SAE2.0上的应用如何访问云原生数据库PolarDB MySQL版集群
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
NoSQL 关系型数据库 MySQL
无法访问Docker 里的 mysql, redis
无法访问Docker 里的 mysql, redis
117 0
|
安全 关系型数据库 MySQL
"深度解析:MySQL密码修改与远程登录配置全攻略,保障数据库安全与灵活访问"
【8月更文挑战第9天】MySQL是广受青睐的开源关系型数据库系统,其安全性和易用性对DBA和开发者至关重要。本文通过实例解析MySQL中用户密码更新及远程登录配置,确保数据库安全访问与高效管理。首先介绍如何分步修改密码,包括登录MySQL、选择数据库、使用`ALTER USER`命令更新密码,并刷新权限。接着,指导如何配置远程访问,涉及调整MySQL监听地址、授权用户远程登录、检查网络设置及测试远程连接。遵循这些步骤,可强化数据库安全性并实现灵活管理。
740 0

推荐镜像

更多