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

先上头文件

 /* 该文件用于描述访问数据库的接口声明 */
#ifndef _OPERATE_DB_H_
#define _OPERATE_DB_H_
//#include <winsock.h> /* windows系统要加上这个 */
#include <mysql.h>
#include "status.h" /*
* 访问数据库的字符串的最大长度
*/
#define QUERY_MAX_SIZE 1024 /*
* 设置访问数据库参数
* _localhost -- 访问数据库的主机名
* _userName -- 访问数据库的用户名
* _password -- 对应的密码
* _databaseName -- 要操作的数据库名字
* 返回结果状态值,如果没有异常返回OK;否则返回ERROR
*/
STATUS
InitDbParms( char const *_localhost, char const *_userName, char const *_password, char const *_databaseName ); /*
* 操作数据库
* commandString -- 存放SQL操作命令
* 如果操作成功返回OK;否则返回ERROR
*/
STATUS
UpdateDatabase( char const *commandString ); /*
* 查询数据库
* commandString -- 查询sql命令
* resultp -- 指向存放查询结果的双指针(如果传递给该参数NULL,则函数不会返回查询结果)
* 返回结果状态值,如果操作成功返回OK;否则返回ERROR
*/
STATUS
QueryDatabase( char const *commandString, MYSQL_RES **resultpp ); /*
** 释放掉mysql查询的结果所占内存
**
** storagepp -- 指向存放结果的内存的双指针
** 返回空。
*/
void
FreeTheSearchStorage(MYSQL_RES **storagepp);
#endif

再上接口文件

 /* 该文件用于描述访问数据库的接口声明 */
#ifndef _OPERATE_DB_H_
#define _OPERATE_DB_H_
#include <mysql.h>
#include "status.h" /*
* 访问数据库的字符串的最大长度
*/
#define QUERY_MAX_SIZE 1024 /*
* 设置访问数据库参数
* _localhost -- 访问数据库的主机名
* _userName -- 访问数据库的用户名
* _password -- 对应的密码
* _databaseName -- 要操作的数据库名字
* 返回结果状态值,如果没有异常返回OK;否则返回ERROR
*/
STATUS
InitDbParms( char const *_localhost, char const *_userName, char const *_password, char const *_databaseName ); /*
* 操作数据库
* commandString -- 存放SQL操作命令
* 如果操作成功返回OK;否则返回ERROR
*/
STATUS
UpdateDatabase( char const *commandString ); /*
* 查询数据库
* commandString -- 查询sql命令
* resultp -- 指向存放查询结果的双指针(如果传递给该参数NULL,则函数不会返回查询结果)
* 返回结果状态值,如果操作成功返回OK;否则返回ERROR
*再上接口定义
#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无效。\n");
                return ERROR;
        }
        if(_userName == NULL)
{
                fprintf(stdout, "传递给函数InitDbParms的参数_userName无效。\n");
                return ERROR;
        }
        if(_databaseName == NULL)
        {
                fprintf(stdout, "传递给函数InitDbParms的参数_databaseName无效。\n");
                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无效。\n");
                return ERROR;
        }         if( mysql_init( &the_conn ) == NULL ) //获取本次连接的句柄
        {
                fprintf(stdout, "Error at mysql_init().\n");
                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().\n");
                exit( EXIT_FAILURE );
        }         if( mysql_query( &the_conn, commandString ) != 0 ) //操作数据库
        {
                fprintf(stdout, "Error at mysql_query().\n");
                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无效。\n");
                return ERROR;
        }         if(mysql_init( &the_conn ) == NULL) //获取本次连接的句柄
        {
                fprintf(stdout, "Error at mysql_init().\n");
                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().\n");
                exit( EXIT_FAILURE );
        }         if(mysql_query( &the_conn, commandString ) != 0) //操作数据库
        {
                fprintf(stdout, "Error at mysql_query().\n");
                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;
        }
    }
}

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. 【问题与解决】Mac OS通过 npm 安装 React Native 报错(checkPermissions Missing write access to /usr/local/lib/node_modules)

    报错情况: 当Mac OS通过 npm 安装 React Native 报错,警告文字为:checkPermissions Missing write access to /usr/local/lib ...

  2. SSE图像算法优化系列二十四: 基于形态学的图像后期抗锯齿算法--MLAA优化研究。

    偶尔看到这样的一个算法,觉得还是蛮有意思的,花了将近10天多的时间研究了下相关代码. 以下为百度的结果:MLAA全称Morphological Antialiasing,意为形态抗锯齿是AMD推出的完 ...

  3. MATLAB 程序计算结果出现 复数(a+bi)问题

    存在对负数开根号的情况了: >> (0.777)^0.1 ans = 0.9751 >> ( ans = 0.6037 >> (0.777)^2.1 ans = 0 ...

  4. PHP微信开发之模板消息回复

    参考:http://www.jb51.net/article/87269.htm 代码: <?php //$ac = file_get_contents('https://api.weixin. ...

  5. 单片机成长之路(51基础篇) - 008 C51 的标示符和关键字

    标准 C 语言定义了 32 个关键字,如下表(ANSI C的32个关键字): C51在此基础上针对单片机功能进行了扩展,详情见下表(C51编译器扩充关键字): C 51的数据类型 51单片机使用的C语 ...

  6. 【算法】解析IEEE 754 标准

    目录结构: contents structure [-] 浮点数的存储过程 次正规数(Denormalized Number) 零(zero) 非数值(NaN) 无穷大(infinity) 除数为0. ...

  7. SQL DML 数据操纵语句

    前言 DML(Data Manipulation Language)语句:数据操纵语句,用于添加.删除.更新和查询数据库记录,并检查数据完整性.常用的语句关键字主要包括 insert.delete.u ...

  8. top 命令

    首先介绍top中一些字段的含义: VIRT:virtual memory usage 虚拟内存1.进程"需要的"虚拟内存大小,包括进程使用的库.代码.数据等 2.假如进程申请100 ...

  9. Openwrt 刷机后配置WAN口,安装luci和设置中文、安装挂载USB存储。

    官方版本的ROM编译时时没有把luci和uhttpd打包进去的,所以,要ssh登录到路由器后手动安装,默认用户名root,密码是空. 如果你的路由器是挂载在其他路由下面的,DHCP可以获取到IP,能正 ...

  10. IPv6地址分类及表示方法

    对于IPv4地址,我们知道分为A类.B类.C类.组播地址和留用地址,几大类,ABC类地址中还会有不同功能的如广播地址.私有地址等类型.那么IPv6的地址是怎么分类的呢?本文就带大家初步了解一下. 先说 ...