C语言定义的操作mysql数据库的接口
编写的环境: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数据库的接口的更多相关文章
- Go语言操作MySQL数据库
Go语言操作MySQL数据库 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用 ...
- 使用Go语言操作MySQL数据库的思路与步骤
最近在做注册登录服务时,学习用Go语言操作MySQL数据库实现用户数据的增删改查,现将个人学习心得总结如下,另外附有代码仓库地址,欢迎各位有兴趣的fork. 软件环境:Goland.Navicat f ...
- c语言操作mysql数据库
c语言操作Mysql数据库,主要就是为了实现对数据库的增.删.改.查等操作,操作之前,得先连接数据库啊,而连接数据库主要有两种方法.一.使用mysql本身提供的API,在mysql的安装目录中可可以看 ...
- php笔记08:数据库编程---使用php的MySQL扩展库操作MySQL数据库
1.使用php的MySQL扩展库操作MySQL数据库: php有3种方式操作MySQL数据库 (1)mysql扩展库 (2)mysqli扩展库 (3)pdo mysql扩展库与mysql数据库 ...
- python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy
内容一览: 1.Python操作MySQL数据库 2.ORM sqlalchemy学习 1.Python操作MySQL数据库 2. ORM sqlachemy 2.1 ORM简介 对象关系映射(英语: ...
- PHP操作MySQL数据库的相关函数
首先,要分清SQL语句的类型: SQL语句的分类 (1)DDL:Data Define Language,数据定义语言--定义表的列结构 CREATE.DROP.ALTER.TRUNCATE (2)D ...
- Golang原生sql操作Mysql数据库增删改查
Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用. 首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动 ...
- 一、初识MySQL数据库 二、搭建MySQL数据库(重点) 三、使用MySQL数据库 四、认识MySQL数据库的数据类型 五、操作MySQL数据库的数据(重点)
一.初识MySQL数据库 ###<1>数据库概述 1. 数据库 长期存储在计算机内的,由组织的可共享的数据集合 存储数据的仓库 文件 ...
- python接口自动化(三十八)-python操作mysql数据库(详解)
简介 现在的招聘要求对QA人员的要求越来越高,测试的一些基础知识就不必说了,来说测试知识以外的,会不会一门或者多门开发与语言,能不能读懂代码,会不会Linux,会不会搭建测试系统,会不会常用的数据库, ...
随机推荐
- Elasticsearch集群运维
一.索引管理 1. 创建索引 PUT test-2019-03 { "settings": { "index": { "number_of_shard ...
- vim编辑器里shift + 3 出现高亮问题,怎么取消掉
在编辑器里非编辑状态,输入: shift + 3 (#) shift + 8 (*) 会出现高亮显示,看着很不舒服, 取消方式: :noh :/aaa (随便的字母或数字都可)
- python 验证码识别示例(一) 某个网站验证码识别
某个招聘网站的验证码识别,过程如下 一: 原始验证码: 二: 首先对验证码进行分析,该验证码的数字颜色有变化,这个就是识别这个验证码遇到的比较难的问题,解决方法是使用PIL 中的 getpixel ...
- Android设备真实DPI与系统标示DPI——ldpi/mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi
1.设备真实DPI与系统标示DPI 2.drawable允许的标示DPI值 drawable文件的合法名称如下: 3.如何验证 Demo如下,建立不同dpi的drawa ...
- npm WARN React-native@0.35.0 requires a peer of react@~15.3.1 but none was installed.
解决方案: 方法一: npm install -save react@~15.3.1 方法二:在package.json中可以添加依赖 "dependencies": { &quo ...
- Python定期删除文件、整理文件夹
1.根据传入的参数,文件所在目录,匹配文件的正则表达式,过期天数进行删除,这些可写在配置文件del_file.conf. del_file3.py #!/usr/bin/env python # en ...
- 【转载】Elasticsearch 5.x 字段折叠的使用,广度搜索
https://elasticsearch.cn/article/132 备注,分组字段只能是 keyword或num类型,不能是text类型 在 Elasticsearch 5.x 有一个字段折叠( ...
- jqweui 关于$(document.body).infinite的bug
jqweui,0.8.2版本infinite存在bug,会存在下拉不触发的情况,解决办法: 源代码3730行附近 Infinite.prototype.scroll = function() { va ...
- mtr命令详解诊断网络路由
首先安装mtr# yum -y install mtr 一般在windows 来判断网络连通性用ping 和tracert, ping的话可以来判断丢包率,tracert可以用来跟踪路由, 在 ...
- list add对象踩的坑
list 添加对象时,没有把new object写到循环体里,导致最后添加了相同的一个对象: public List<goods> find(String goodsname) { Lis ...