MySQL用C访问的示例代码-阿里云开发者社区

开发者社区> 柳鲲鹏> 正文

MySQL用C访问的示例代码

简介: 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;
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
云服务器ECS首次使用体验
自我简介,在阿里云官网参与飞天加速计划,在校大学生免费领取为期两周的服务器,阿里云ECS的使用攻略,实现了文章图片上传功能,云服务器ECS使用期间的收获和总结,以及自己对未来的展望。
27 0
搭建服务器初体验
服务器安装mysql、tomcat
20 0
PG+MySQL第9课-实时精准营销
通常业务场景会涉及基于标签条件圈选目标客户、基于用户特征值扩选相似人群、群体用户画像分析这些技术,本文将围绕这三个场景去介绍在实施精准营销里面的PG数据库的使用
23 0
Solr 中 core 创建后的数据导入
Solr 中 core 创建后的数据导入
20 0
SQL 常用操作
SQL 常用操作
23 0
Docker从入门到上瘾
Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。
14 0
阿里acp认证所需具备的知识有哪些?阿里云aca证书有效期是多久
为了让我们更好的立足于社会,我们可能需要考取一些证书,才能更好的发展下去,但是有些考取的证书是有时效性的,你们知道阿里云aca证书有效期是多久吗?认证大使的小编这就告诉你们。
11 0
从零到一上手玩转云服务器体验报告
1,动手实战-初识上云基础,动手实操ECS云服务器新手上路 2,动手实战-上云必备环境准备,动手实操快速搭建LAMP环境 3,动手实战-云上多产品学习,使用ECS服务器部署MySQL数据库 4,动手实战-最佳应用实践,使用PolarDB和ECS搭建门户网站
7 0
我与阿里云的成长故事
我与阿里云的成长故事
65 0
+关注
2093
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载