编写的环境:centos7系统下,对mysql的衍生mariadb进行数据库的操作,包含设置访问数据库的参数,查询数据库和增删改数据库的三个功能。对于查询数据库,我这里允许不返回查询结果,用于判断查询是否成功的功能编写上。

先上头文件

  1. /* 该文件用于描述访问数据库的接口声明 */
  2. #ifndef _OPERATE_DB_H_
  3. #define _OPERATE_DB_H_
  4. //#include <winsock.h> /* windows系统要加上这个 */
  5. #include <mysql.h>
  6. #include "status.h"
  7.  
  8. /*
  9. * 访问数据库的字符串的最大长度
  10. */
  11. #define QUERY_MAX_SIZE 1024
  12.  
  13. /*
  14. * 设置访问数据库参数
  15. * _localhost -- 访问数据库的主机名
  16. * _userName -- 访问数据库的用户名
  17. * _password -- 对应的密码
  18. * _databaseName -- 要操作的数据库名字
  19. * 返回结果状态值,如果没有异常返回OK;否则返回ERROR
  20. */
  21. STATUS
  22. InitDbParms( char const *_localhost, char const *_userName, char const *_password, char const *_databaseName );
  23.  
  24. /*
  25. * 操作数据库
  26. * commandString -- 存放SQL操作命令
  27. * 如果操作成功返回OK;否则返回ERROR
  28. */
  29. STATUS
  30. UpdateDatabase( char const *commandString );
  31.  
  32. /*
  33. * 查询数据库
  34. * commandString -- 查询sql命令
  35. * resultp -- 指向存放查询结果的双指针(如果传递给该参数NULL,则函数不会返回查询结果)
  36. * 返回结果状态值,如果操作成功返回OK;否则返回ERROR
  37. */
  38. STATUS
  39. QueryDatabase( char const *commandString, MYSQL_RES **resultpp );
  40.  
  41. /*
  42. ** 释放掉mysql查询的结果所占内存
  43. **
  44. ** storagepp -- 指向存放结果的内存的双指针
  45. ** 返回空。
  46. */
  47. void
  48. FreeTheSearchStorage(MYSQL_RES **storagepp);
  49. #endif

再上接口文件

  1. /* 该文件用于描述访问数据库的接口声明 */
  2. #ifndef _OPERATE_DB_H_
  3. #define _OPERATE_DB_H_
  4. #include <mysql.h>
  5. #include "status.h"
  6.  
  7. /*
  8. * 访问数据库的字符串的最大长度
  9. */
  10. #define QUERY_MAX_SIZE 1024
  11.  
  12. /*
  13. * 设置访问数据库参数
  14. * _localhost -- 访问数据库的主机名
  15. * _userName -- 访问数据库的用户名
  16. * _password -- 对应的密码
  17. * _databaseName -- 要操作的数据库名字
  18. * 返回结果状态值,如果没有异常返回OK;否则返回ERROR
  19. */
  20. STATUS
  21. InitDbParms( char const *_localhost, char const *_userName, char const *_password, char const *_databaseName );
  22.  
  23. /*
  24. * 操作数据库
  25. * commandString -- 存放SQL操作命令
  26. * 如果操作成功返回OK;否则返回ERROR
  27. */
  28. STATUS
  29. UpdateDatabase( char const *commandString );
  30.  
  31. /*
  32. * 查询数据库
  33. * commandString -- 查询sql命令
  34. * resultp -- 指向存放查询结果的双指针(如果传递给该参数NULL,则函数不会返回查询结果)
  35. * 返回结果状态值,如果操作成功返回OK;否则返回ERROR
  36. *再上接口定义
  1. #include <stdio.h>
    #include <stdlib.h>
    //#include <winsock.h> /* windows系统要加上这个 */
    #include <mysql.h>
    #include "operateDb.h"
    #include "status.h"
  2.  
  3. /*
     * 内部数据
     */
    static char const *localhost = NULL; //主机名
    static char const *userName = NULL;  //mysql用户名
    static char const *password = NULL;  //它的密码
    static char const *databaseName = NULL; //所要操作的数据库
  4.  
  5. /*
     * 外部接口
     *
     *
     * 设置访问数据库参数
     * _localhost -- 访问数据库的主机名
     * _userName -- 访问数据库的用户名
     * _password -- 对应的密码
     * _databaseName -- 要操作的数据库名字
     * 返回结果状态值,如果没有异常返回OK;否则返回ERROR
     */
    STATUS
    InitDbParms( char const *_localhost, char const *_userName, char const *_password, char const *_databaseName )
    {
            if(_localhost == NULL) //检查参数是否有效
            {
                    fprintf(stdout, "传递给函数InitDbParms的参数_localhost无效。\n");
                    return ERROR;
            }
            if(_userName == NULL)
    {
                    fprintf(stdout, "传递给函数InitDbParms的参数_userName无效。\n");
                    return ERROR;
            }
            if(_databaseName == NULL)
            {
                    fprintf(stdout, "传递给函数InitDbParms的参数_databaseName无效。\n");
                    return ERROR;
            }
  6.  
  7.         localhost = _localhost;
            userName = _userName;
            password = _password;
            databaseName = _databaseName;
            return OK;
    }
  8.  
  9. /*
     * 操作数据库
     * commandString -- 存放SQL操作命令
     * 如果操作成功返回OK;否则返回ERROR
     */
    STATUS
    UpdateDatabase( char const *commandString )
    {
            MYSQL the_conn;
  10.  
  11.         if(commandString == NULL) //检查参数是否有效
           {
                    fprintf(stdout, "传递给函数UpdateDatabase的参数commandString无效。\n");
                    return ERROR;
            }
  12.  
  13.         if( mysql_init( &the_conn ) == NULL ) //获取本次连接的句柄
            {
                    fprintf(stdout, "Error at mysql_init().\n");
                    exit( EXIT_FAILURE );
            }
  14.  
  15.         if( mysql_real_connect( &the_conn, localhost, userName, password, databaseName, MYSQL_PORT, NULL, 0 ) == NULL ) //连接数据库
            {
                    fprintf(stdout, "Error at mysql_real_connect().\n");
                    exit( EXIT_FAILURE );
            }
  16.  
  17.         if( mysql_query( &the_conn, commandString ) != 0 ) //操作数据库
            {
                    fprintf(stdout, "Error at mysql_query().\n");
                    exit(EXIT_FAILURE);
            }
            mysql_close( &the_conn ); //断开连接
            return OK;
    }
  18.  
  19. /*
     * 查询数据库
     * commandString -- 查询sql命令
     * resultpp -- 指向存放查询结果的双指针,注意,如果该参数为NULL,则程序不返回查询的结果。
     * 返回结果状态值,如果操作成功返回OK;否则返回ERROR
     */
    STATUS
    QueryDatabase( char const *commandString, MYSQL_RES **resultpp )
    {
            MYSQL the_conn;
            MYSQL_RES *resultp = NULL;
  20.  
  21.         if(commandString == NULL) //检查参数是否有效
            {
                    fprintf(stdout, "传递给函数QueryDatabase的参数commandString无效。\n");
                    return ERROR;
            }
  22.  
  23.         if(mysql_init( &the_conn ) == NULL) //获取本次连接的句柄
            {
                    fprintf(stdout, "Error at mysql_init().\n");
                    exit( EXIT_FAILURE );
            }
  24.  
  25.         if(mysql_real_connect( &the_conn, localhost, userName, password, databaseName, MYSQL_PORT, NULL, 0 ) == NULL) //连接数据库
            {
                    fprintf(stdout, "Error at mysql_real_connect().\n");
                    exit( EXIT_FAILURE );
            }
  26.  
  27.         if(mysql_query( &the_conn, commandString ) != 0) //操作数据库
            {
                    fprintf(stdout, "Error at mysql_query().\n");
                    exit( EXIT_FAILURE );
            }
  28.  
  29.         resultp = mysql_store_result(&the_conn); //获取查询结果
            mysql_close(&the_conn); //断开连接
  30.  
  31.         if( mysql_num_rows(resultp) != 0 ) //如果查询结果个数不为0
            {
                    if(resultpp == NULL) //判断是否需要返回查询结果
                    {
                            mysql_free_result(resultp);
                    }
                    else
                    {
                            *resultpp = resultp; //返回查询结果
                    }
                    return OK;
            }
            else
            {
                    if(resultpp == NULL)
                    {
                            mysql_free_result(resultp);
                    }
                    else
                    {
                            *resultpp = resultp;
                            resultp = NULL;
                    }
                    return ERROR;
            }
    }
  32.  
  33. /*
    ** 释放掉mysql查询的结果所占内存
    **
    ** storagepp -- 指向存放结果的内存的双指针
    ** 返回空。
    */
    void
    FreeTheSearchStorage(MYSQL_RES **storagepp)
    {
        MYSQL_RES *storagep = NULL;
  34.  
  35.     if(storagepp != NULL)
        {
            storagep = *storagepp;
            if(storagep != NULL)
            {
                mysql_free_result(storagep);
                storagep = NULL;
                *storagepp = storagep;
            }
        }
    }

C语言定义的操作mysql数据库的接口的更多相关文章

  1. Go语言操作MySQL数据库

    Go语言操作MySQL数据库 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用 ...

  2. 使用Go语言操作MySQL数据库的思路与步骤

    最近在做注册登录服务时,学习用Go语言操作MySQL数据库实现用户数据的增删改查,现将个人学习心得总结如下,另外附有代码仓库地址,欢迎各位有兴趣的fork. 软件环境:Goland.Navicat f ...

  3. c语言操作mysql数据库

    c语言操作Mysql数据库,主要就是为了实现对数据库的增.删.改.查等操作,操作之前,得先连接数据库啊,而连接数据库主要有两种方法.一.使用mysql本身提供的API,在mysql的安装目录中可可以看 ...

  4. php笔记08:数据库编程---使用php的MySQL扩展库操作MySQL数据库

    1.使用php的MySQL扩展库操作MySQL数据库: php有3种方式操作MySQL数据库 (1)mysql扩展库 (2)mysqli扩展库 (3)pdo     mysql扩展库与mysql数据库 ...

  5. python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy

    内容一览: 1.Python操作MySQL数据库 2.ORM sqlalchemy学习 1.Python操作MySQL数据库 2. ORM sqlachemy 2.1 ORM简介 对象关系映射(英语: ...

  6. PHP操作MySQL数据库的相关函数

    首先,要分清SQL语句的类型: SQL语句的分类 (1)DDL:Data Define Language,数据定义语言--定义表的列结构 CREATE.DROP.ALTER.TRUNCATE (2)D ...

  7. Golang原生sql操作Mysql数据库增删改查

    Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用. 首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动 ...

  8. 一、初识MySQL数据库 二、搭建MySQL数据库(重点) 三、使用MySQL数据库 四、认识MySQL数据库的数据类型 五、操作MySQL数据库的数据(重点)

    一.初识MySQL数据库 ###<1>数据库概述     1. 数据库         长期存储在计算机内的,由组织的可共享的数据集合         存储数据的仓库         文件 ...

  9. python接口自动化(三十八)-python操作mysql数据库(详解)

    简介 现在的招聘要求对QA人员的要求越来越高,测试的一些基础知识就不必说了,来说测试知识以外的,会不会一门或者多门开发与语言,能不能读懂代码,会不会Linux,会不会搭建测试系统,会不会常用的数据库, ...

随机推荐

  1. Eslint 规则说明

    "no-alert": 0,//禁止使用alert confirm prompt"no-array-constructor": 2,//禁止使用数组构造器&qu ...

  2. 一目了然了解JAVA集合体系

    在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量.一旦在数组初始化时指定了这个数组长度,这个数组长度就是不可变的,如果 ...

  3. 【C++】C++中typedef、auto与decltype的作用

    typedef 类型别名(type alias)是一个名字,使用typedef不会真正地创建一种新的数据类型,它只是已经存在数据类型的一个新名称.语法: typedef type name; 其中ty ...

  4. springboot配置idea 热部署

    背景: 在开发中,当我们修改代码之后,每次都要重新启动,很是浪费时间,在springboot中就有一种热部署方式,可以实现想要修改不需要每次都重新启动,保存即可生效 用法: 一.maven 添加   ...

  5. Java里进制转换(二进制、八进制、十进制、十六进制)

    // 十进制转其它进制(二进制,八进制,十六进制) int k = 17; System.out.println(Integer.toBinaryString(k));// 转二进制 System.o ...

  6. Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息

    Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息 1.1. 异常的处理模式exit  continue undo模式 1 1.2. 捕获所有异常使用        DECLARE ...

  7. [svc]linux紧急情况处理

    如何判断 Linux 服务器是否被入侵? w-last-history top-lsof-strace netstat CPU利用率很高 800%爆了 netstat find 文件 查/etc/rc ...

  8. SQL获取当前时间月份为两位数

    --获取当前时间月份为两位数 )),) --获取当前时间上月月份为两位数 , )),)

  9. C#通过用户名与密码访问共享目录

    C#通过用户名与密码访问共享目录 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  10. python(62):保留两位小数

    转载:https://blog.csdn.net/jiandanjinxin/article/details/77752297 在C/C++语言对于整形数执行除法会进行地板除(舍去小数部分). 例如 ...