简单LMDB用法_法语简单过去时用法

简单LMDB用法_法语简单过去时用法装载请注明出处

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

复制编译即可运行
简介:主要运用mdb_put/mdb_cursor_put |mdb_get/mdb_cursor_get存取数据
makefile
 

all: g++ -o mdb_demo mdb_demo.cpp liblmdb.a -pthread //需要把liblmdb.a包包含进去,网上可以找到clean: rm -rf mdb_demo core


code
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <string> #include "lmdb.h" //包含头文件 using namespace std; const char *pMdbFilePath = "./MdbFile"; //Mdb Class class Mdb { public: Mdb() { cout << "Im Mdb Constuctor" << endl; } ~Mdb() { cout << "Im Desructor" << endl; } //Create Mdb Env, Set Env Mapsize and Open Env bool InitMdbEnv(const char *pMdbFile, int nSize); //Open Mdb File bool MdbOpen(); //Open a Mdb Cursor bool MdbCursorOpen(); //Put Data Into Mdb File bool MdbPut(char* pkey, char* pValue); //Get Data From Mdb File bool MdbGet(char* pkey, char* pData); //Using Cursor Get Data From Mdb File bool MdbCursorGet(char* pKey, char *pData); //Using Cursor Restore Data Into Mdb File bool MdbCursorPut(char* pKey, char* pData); //Transition Begin bool MdbTxnBegin(); //Transition Commit, Current Transiton end bool MdbTxnCommit(); //Transition Abort void MdbTxnAbort(); //Mdb Cursor Handle Close void MdbCursorClose(); //Mdb File Close void MdbClose(); //Mdb Env Close void MdbEnvClose(); private: MDB_env *env; MDB_dbi dbi; MDB_txn *txn; MDB_cursor *cursor; }; void Mdb::MdbTxnAbort() { mdb_txn_abort(txn); return ; } void Mdb::MdbCursorClose() { mdb_cursor_close(cursor); return ; } bool Mdb::MdbCursorPut(char* pKey, char* pData) { MDB_val key, data; key.mv_size = strlen(pKey)+1; key.mv_data = pKey; data.mv_size = strlen(pData)+1; data.mv_data = pData; if(mdb_cursor_put(cursor, &key, &data, MDB_NODUPDATA)) { cout << "MdbCursorPut Failed!!!" <<endl; return false; } return true; } bool Mdb::MdbCursorGet(char* pKey, char *pData) { MDB_val key, data; key.mv_size = strlen(pKey)+1; key.mv_data = pKey; if(mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) { cout << "mdb_cursor_get Failed Or No Data!!!" <<endl; return false; } strcpy(pData, (char*)data.mv_data); strcpy(pKey, (char*)key.mv_data); return true; } bool Mdb::MdbCursorOpen() { if(mdb_cursor_open(txn, dbi, &cursor)) { cout << "mdb_cursor_open Failed!!!" << endl; return false; } return true; } bool Mdb::InitMdbEnv(const char *pMdbFile, int nSize) { int rc=(mdb_env_create(&env) || mdb_env_set_mapsize(env, nSize) || mdb_env_open(env, pMdbFile, 0, 0664)); if(rc) { cout << "Initialize " << pMdbFile << "Mdb Fialed!!!" << endl; return false; } return true; } bool Mdb::MdbTxnBegin() { if(mdb_txn_begin(env, NULL, 0, &txn)) {cout << "mdb_open failed!!!" << endl; return false;} return true; } bool Mdb::MdbOpen() { if(mdb_open(txn, NULL, 0, &dbi)) {cout << "mdb_txn_beginfailed!!!" << endl; return false;} return true; } void Mdb::MdbClose() { mdb_close(env, dbi); return ; } void Mdb::MdbEnvClose() { mdb_env_close(env); return ; } bool Mdb::MdbPut(char* pKey, char* pData) { MDB_val key, data; key.mv_size = strlen(pKey)+1; key.mv_data = pKey; data.mv_size = strlen(pData)+1; data.mv_data = pData; int rc = mdb_put(txn, dbi, &key, &data, MDB_NOOVERWRITE); if(rc == MDB_MAP_FULL) { cout << "Mdb File is full, Alert!!!" << endl; return false; } return true; } bool Mdb::MdbTxnCommit() { if(mdb_txn_commit(txn)) { cout << "mdb_txn_commit failed" << endl; return false; } return true; } bool Mdb::MdbGet(char* pKey, char* pData) { MDB_val key, data; key.mv_size = strlen(pKey)+1; key.mv_data = pKey; if(mdb_get(txn, dbi, &key, &data)) { cout << "mdb_get failed!!!" << endl; return false; } strcpy(pData, (char*)data.mv_data); return true; } int main(int argc,char *argv[]) { Mdb mdb; //Create a Mdb Objiect mdb.InitMdbEnv(pMdbFilePath, 200*1024*1024);//Initialize Mdb Env and Specifc Mdb File Max Size mdb.MdbOpen(); //Open a Mdb File //************mdb_put Restore Data******************* char cKey[10]=""; char cValue[100]="Im value"; mdb.MdbTxnBegin(); //Begin a Transition for(int i=0; i<100; i++) { sprintf(cKey, "%06d", i); mdb.MdbPut(cKey, cValue); //mdb_put Restore Data } mdb.MdbTxnCommit(); //Commit Transition //***************************************************** //************mdb_get Get items Form Database********** char cKey1[]="000002"; char cValue1[100]=""; mdb.MdbTxnBegin(); mdb.MdbGet(cKey1, cValue1); mdb.MdbTxnCommit(); cout << "Key:000002:" << cValue1 << endl; //***************************************************** //************mdb_cursor_put Using Cursor Restore Data******* char cKey2[10]=""; char cValue2[100]="I m Cursor Values"; mdb.MdbTxnBegin(); mdb.MdbCursorOpen(); for(int i=101; i<201; i++) { sprintf(cKey2, "%06d", i); mdb.MdbCursorPut(cKey2, cValue2); } mdb.MdbCursorClose(); mdb.MdbTxnCommit(); //*********************************************************** //***********mdb_cursor_get Using Cursor Get Data************ mdb.MdbTxnBegin(); mdb.MdbCursorOpen(); char cKey3[10]=""; char cValue3[100]=""; while (mdb.MdbCursorGet(cKey3, cValue3)) { cout << "Key: " << cKey3 << " data: " << cValue3 << endl; } mdb.MdbCursorClose(); mdb.MdbTxnAbort(); //*********************************************************** mdb.MdbClose(); //Close Mdb File mdb.MdbEnvClose(); //Close Mdb Env return 0; } 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187895.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据技术大致包含哪些内容「建议收藏」

    大数据技术大致包含哪些内容「建议收藏」关于大数据的概念,指的是无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。而大数据技术,是指从各种各样类型的数据中,快速获得有价值信息的能力。那么关于大数据的技术大致包含哪些内容?一、数据采集ETL工具负责将分布的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。二…

    2022年5月28日
    47
  • RewriteCond apche获取url参数

    RewriteCond apche获取url参数开发系统中用到:RewriteEngineonRewriteCond%{QUERY_STRING}ser=([a-zA-Z0-9_]+)RewriteRule^/engine(.*)$http://e.smartearth.cn:9000/%1?%{QUERY_STRING}[P]RewriteCond%{QUERY_STRING}ser=([a-zA-Z0-9

    2022年5月23日
    28
  • malloc函数具体解释

    malloc函数具体解释

    2021年12月7日
    58
  • makefile 编译参数_gcc使用说明

    makefile 编译参数_gcc使用说明gcc编译源文件共有4个过程,预处理、编译、汇编、链接。预处理:命令:gcc-Etest.c-otest.i(-o后面指定生成文件的命名)过程:展开宏定义(#define),处理编译条件指令(#if#ifndef等),插入引用的头文件(#include),删除注释,添加行号和文件标识。结果:生成.i文件,一般的文本编辑器都能打开编译:命令:gcc-Ste…

    2022年10月13日
    3
  • idea激活码永久有效-激活码分享

    (idea激活码永久有效)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html9A…

    2022年3月22日
    749
  • ROS机器人里程计模型

    ROS机器人里程计模型3.5移动机器人系统模型相信大家的机器人平台STM32端底层控制和机器人urdf建模都已经顺利完成了,在正式开始ros端编写机器人启动功能包之前,我们还不得不学习一些必要的理论知识。别担心数学不好,这里基本都是高中数学。下面我们开始,Areyouready?没准备好也开始了。3.5.1常用坐标系系统模型在移动机器人技术研究中,最为常用的坐标系统是笛卡尔坐标系统。而在SLAM算法研究中,有如下几个比较常见的笛卡尔坐标系统,它们分别为机器人坐标系XRYROR、传感器坐标系XSYSOS

    2022年6月30日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号