MySQL用C访问的示例代码

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 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;
}
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
安全 关系型数据库 数据管理
DMS产品常见问题之香港地区RDS开启安全访问代理失败如何解决
DMS(数据管理服务,Data Management Service)是阿里云提供的一种数据库管理和维护工具,它支持数据的查询、编辑、分析及安全管控;本汇总集中了DMS产品在实际使用中用户常遇到的问题及其相应的解答,目的是为使用者提供快速参考,帮助他们有效地解决在数据管理过程中所面临的挑战。
|
6月前
|
关系型数据库 MySQL 网络安全
mysql只能通过ssh通道连接到内网,如何创建只能访问MySQL的SSH用户
mysql只能通过ssh通道连接到内网,如何创建只能访问MySQL的SSH用户
334 0
|
6月前
|
SQL 关系型数据库 MySQL
软件测试|使用PyMySQL访问MySQL数据库的详细指南
软件测试|使用PyMySQL访问MySQL数据库的详细指南
46 0
|
9月前
|
SQL 存储 安全
使用 SpringBoot 访问 MySQL 数据库
创建一个 MySQL 数据库,构建一个 Spring 应用程序,并将其连接到新创建的数据库。
120 0
|
4月前
|
存储 关系型数据库 MySQL
4天4夜渡劫成功,解决10月1项目上线遇到的一个Mysql大坑,导致项目无法正常访问
4天4夜渡劫成功,解决10月1项目上线遇到的一个Mysql大坑,导致项目无法正常访问
37 0
4天4夜渡劫成功,解决10月1项目上线遇到的一个Mysql大坑,导致项目无法正常访问
|
5月前
|
关系型数据库 MySQL API
如何为RAM子账号授予单一RDS实例的访问权限?
在阿里云中,如何为RAM子账号进行精准授权,授予单一RDS实例的访问权限?这篇文档帮到你
62020 0
|
7月前
|
缓存 NoSQL 关系型数据库
课时3:通过缓存来加速数据库访问(MySQL+Redis)
课时3:通过缓存来加速数据库访问(MySQL+Redis)
153 0
|
7月前
|
关系型数据库 MySQL Java
RDS MySQL高并发访问下的系统稳定性
RDS MySQL支持线程池管理,只需要少量线程完成活跃会话的任务即可,避免突发流量导致的业务稳定性问题。
279 0
|
7月前
|
弹性计算 关系型数据库 MySQL
如何通过RDS MySQL数据库内网访问
本场景基于1台Linux云服务器实例和1台RDS MySQL实例,通过操作控制台和系统实现ECS内网访问RDS MySQL实例。
318 0
|
8月前
|
弹性计算 关系型数据库 Apache
使用ECS和RDS部署WordPress,搭建个人博客并使用域名访问
使用阿里云ECS和RDS部署WordPress,搭建个人博客并使用域名访问,积累了宝贵的经验。这个过程不仅让我更加了解了云计算和服务器管理,还提升了我解决问题的能力。我将继续努力改进博客,分享我的思考和经验,希望能够对其他人有所帮助!
369 7
使用ECS和RDS部署WordPress,搭建个人博客并使用域名访问