zoukankan      html  css  js  c++  java
  • C语言定义的操作mysql数据库的接口

    编写的环境: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  *再上接口定义
    #include <stdio.h>
    #include <stdlib.h>
    //#include <winsock.h> /* windows系统要加上这个 */
    #include <mysql.h>
    #include "operateDb.h"
    #include "status.h"

    /*
     * 内部数据
     */
    static char const *localhost = NULL; //主机名
    static char const *userName = NULL;  //mysql用户名
    static char const *password = NULL;  //它的密码
    static char const *databaseName = NULL; //所要操作的数据库

    /*
     * 外部接口
     *
     *
     * 设置访问数据库参数
     * _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无效。 ");
                    return ERROR;
            }
            if(_userName == NULL)
    {
                    fprintf(stdout, "传递给函数InitDbParms的参数_userName无效。 ");
                    return ERROR;
            }
            if(_databaseName == NULL)
            {
                    fprintf(stdout, "传递给函数InitDbParms的参数_databaseName无效。 ");
                    return ERROR;
            }

            localhost = _localhost;
            userName = _userName;
            password = _password;
            databaseName = _databaseName;
            return OK;
    }

    /*
     * 操作数据库
     * commandString -- 存放SQL操作命令
     * 如果操作成功返回OK;否则返回ERROR
     */
    STATUS
    UpdateDatabase( char const *commandString )
    {
            MYSQL the_conn;

            if(commandString == NULL) //检查参数是否有效
           {
                    fprintf(stdout, "传递给函数UpdateDatabase的参数commandString无效。 ");
                    return ERROR;
            }

            if( mysql_init( &the_conn ) == NULL ) //获取本次连接的句柄
            {
                    fprintf(stdout, "Error at mysql_init(). ");
                    exit( EXIT_FAILURE );
            }

            if( mysql_real_connect( &the_conn, localhost, userName, password, databaseName, MYSQL_PORT, NULL, 0 ) == NULL ) //连接数据库
            {
                    fprintf(stdout, "Error at mysql_real_connect(). ");
                    exit( EXIT_FAILURE );
            }

            if( mysql_query( &the_conn, commandString ) != 0 ) //操作数据库
            {
                    fprintf(stdout, "Error at mysql_query(). ");
                    exit(EXIT_FAILURE);
            }
            mysql_close( &the_conn ); //断开连接
            return OK;
    }

    /*
     * 查询数据库
     * commandString -- 查询sql命令
     * resultpp -- 指向存放查询结果的双指针,注意,如果该参数为NULL,则程序不返回查询的结果。
     * 返回结果状态值,如果操作成功返回OK;否则返回ERROR
     */
    STATUS
    QueryDatabase( char const *commandString, MYSQL_RES **resultpp )
    {
            MYSQL the_conn;
            MYSQL_RES *resultp = NULL;

            if(commandString == NULL) //检查参数是否有效
            {
                    fprintf(stdout, "传递给函数QueryDatabase的参数commandString无效。 ");
                    return ERROR;
            }

            if(mysql_init( &the_conn ) == NULL) //获取本次连接的句柄
            {
                    fprintf(stdout, "Error at mysql_init(). ");
                    exit( EXIT_FAILURE );
            }

            if(mysql_real_connect( &the_conn, localhost, userName, password, databaseName, MYSQL_PORT, NULL, 0 ) == NULL) //连接数据库
            {
                    fprintf(stdout, "Error at mysql_real_connect(). ");
                    exit( EXIT_FAILURE );
            }

            if(mysql_query( &the_conn, commandString ) != 0) //操作数据库
            {
                    fprintf(stdout, "Error at mysql_query(). ");
                    exit( EXIT_FAILURE );
            }

            resultp = mysql_store_result(&the_conn); //获取查询结果
            mysql_close(&the_conn); //断开连接

            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;
            }
    }

    /*
    ** 释放掉mysql查询的结果所占内存
    **
    ** storagepp -- 指向存放结果的内存的双指针
    ** 返回空。
    */
    void
    FreeTheSearchStorage(MYSQL_RES **storagepp)
    {
        MYSQL_RES *storagep = NULL;

        if(storagepp != NULL)
        {
            storagep = *storagepp;
            if(storagep != NULL)
            {
                mysql_free_result(storagep);
                storagep = NULL;
                *storagepp = storagep;
            }
        }
    }

  • 相关阅读:
    百度mp3地址解密码
    VB 在EXE后附加信息
    截屏函数
    Base64和StrToByte
    The Android ION memory allocator, DMABUF is mentioned as well
    DDC EDID 介绍
    Memory management for graphic processors TTM的由来
    科普 写display driver的必看 How video card works [2D的四种主要操作]
    GEM vs TTM
    DMABUF 背景介绍文章 Sharing buffers between devices
  • 原文地址:https://www.cnblogs.com/the-one/p/7620397.html
Copyright © 2011-2022 走看看