前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >extremeDB_render props模式

extremeDB_render props模式

作者头像
全栈程序员站长
发布2022-11-04 17:07:30
2750
发布2022-11-04 17:07:30
举报
文章被收录于专栏:全栈程序员必看

简介:

eXtremeDB 是一款内存数据库产品。主要应用于嵌入式等实时系统中,可以提高软件的响应速度。具体请参见官方网站 http://www.mcobject.com.

它是一个对象型数据库,可以理解为,数据库中的每一行都是一个对象。

使用方法:

下面根据一个简单的例子,来说明eXtremeDB的使用方法。

1,编写数据库定义文件

利用任何文本编辑器,创建一个*.mco 文件,如下:

/** * Author : hehong * date :2010-11-22 * Description: test eXtremeDB **/ // signed<1> 是 eXtremeDB 内置的数据类型,下面通过宏的形式,起一个便于记忆的名称。 #define int1 signed<1> // 表示1个字节有符号 ,下面类推 #define int2 signed<2> #define int4 signed<4> #define int8 signed<8> #define uint8 unsigned<8> #define uint4 unsigned<4> #define uint2 unsigned<2> #define uint1 unsigned<1>

declare database testdb; //声明数据库的

class employeer //声明一个类,相当于关系型数据库中的表 { uint8 id; //开始声明表中的字段。 string name; int1 sex; int2 age; unique tree<id> IdxID; //用字段id 建立一个索引,可以用来进行查找 };

2,在命令行下执行eXtremeDB 安装目录下的 mcocomp.exe

假设 上面的mco文件保存在 d:/testDB.mco 中

执行命令行 mcocomp.exe -x32 -hpp d:/testDB.mco

-32 表示操作系统使用的是32位

-hpp 表示生成c++ 方式的代码

执行后会生成如下3个文件:

testdb.c

testdb.h (c接口)

testdb.hpp (c++ 接口)

这些代码自动生成,对数据库的操作,就是利用接口文件中的各种函数来实现的

3,将上面生成的3个文件加入VC++ 工程

并设置要是有的eXtremeDB的lib文件,比如 mcolib.lib mcolib_shm.lib(这个版本支持共享内存)

4,编写代码实现内存数据库的常用功能,代码如下:详细请看注释

#include “stdafx.h” #include “mco.h” #include “testdb.h” #include <stdlib.h> #include <stdio.h> #include “testdb.hpp” #include “mcospec.h”

static mco_db_h m_db_h; //数据库句柄 static mco_trans_h m_trans_h; //事务句柄 static mco_runtime_info_t m_runtime_info; //数据库运行时信息 static void* m_start_mem=0; //数据库内存地址 static const char* m_db_name=”testDB”; //数据库名字

#define MAXTRANSSIZE 10000

const int dbSize = 20*1024*1024; //数据库大小 const int pageSize = 256;

static void InsertOne(int id,char* name,char sex,int age); static void FindOne(int id); static void Search1(); static void Update1(); static void Remove1(int id);

static void mco_my_error_handle(int errorCode) { printf(“mco happen error,code=%d”,errorCode); }

int _tmain(int argc, _TCHAR* argv[]) { MCO_RET ret;

//获取内存数据库运行时信息,根据性能来进行不同的处理

//runtime info 记录了当前内存数据库的功能上的一些信息,比如 是否支持共享内存等等。 mco_get_runtime_info(&m_runtime_info);

if(m_runtime_info.mco_shm_supported) { //如果支持共享内存,可以在这里使用共享内存 } else { m_start_mem = malloc(dbSize); if(m_start_mem == NULL) { printf(“alloc memory fail./n”); return -1; } }

//设置错误处理函数 mco_error_set_handler(mco_my_error_handle);

//启动运行时,这个函数必须调用 ret = mco_runtime_start(); if(ret != MCO_S_OK) { printf(“runtime start fail./n”); return -1; }

//设置一个事物可以更新的记录数量 ret = mco_set_maxtranssize(MAXTRANSSIZE);

//创建数据库 ret= mco_db_open(m_db_name,testdb_get_dictionary(),m_start_mem,dbSize,pageSize); if(ret!=MCO_S_OK) { printf(“open memory db error./n”); goto errorExit; } //连接数据库 ret = mco_db_connect(m_db_name,&m_db_h); if(ret != MCO_S_OK) { printf(“connect memory db error./n”); goto errorExit; }

//插入记录 InsertOne(1,”hehong”,’m’,23); InsertOne(2,”yuanlin”,’w’,23);

//查找记录 FindOne(2); Search1();

//更新数据 Update1();

//删除记录

Remove1(2);

//清理数据 mco_close_all_instances(); mco_db_close(m_db_name); mco_db_kill(m_db_name); //结束运行时 mco_runtime_stop();

getchar();

return 0;

errorExit: if(!m_runtime_info.mco_shm_supported) { free(m_start_mem); } return -1; }

//插入一条记录 void InsertOne(int id,char* name,char sex,int age) { //启动一个事务 MCO_RET ret = mco_trans_start(m_db_h,MCO_READ_WRITE,MCO_TRANS_FOREGROUND,&m_trans_h); if(ret == MCO_S_OK) {

//创建一个对象,相当于创建了一行数据 testdb::employeer newObj; ret = newObj.create(m_trans_h); if(ret == MCO_S_OK) {

//设置对象(行)的各字段的信息 newObj.id_put(id); newObj.name_put(name,strlen(name)); newObj.age_put(age); newObj.sex_put(sex);

mco_trans_commit(m_trans_h);

printf(“add user %s successful./n”,name); } else { mco_trans_rollback(m_trans_h); }

} } //查找 void FindOne(int id) { MCO_RET ret = mco_trans_start(m_db_h,MCO_READ_WRITE,MCO_TRANS_FOREGROUND,&m_trans_h); //利用find 进行查找,查到的数据会放到对象obj 中 testdb::employeer obj; ret = testdb::employeer::IdxID::find(m_trans_h,id,obj);

if(ret == MCO_S_OK) {

//显示obj中的一些信息 uint2 len; printf(“find a user id=%d /n”,id); char name[20]={0}; obj.name_get(name,20,len); printf(“user’s name is %s/n”,name); } else if(ret = MCO_S_NOTFOUND) { printf(“can not find user id =%d /n”,id); } mco_trans_commit(m_trans_h); }

void Search1() {

//利用search 和cursor 功能来实现遍历多个查找结果 mco_cursor_t my_cursor; mco_cursor_h cursor_h=&my_cursor; testdb::employeer obj;

MCO_RET ret = mco_trans_start(m_db_h,MCO_READ_WRITE,MCO_TRANS_FOREGROUND,&m_trans_h);

testdb::employeer::IdxID::cursor(m_trans_h,cursor_h); //查找id小于等于10的用户 ret = testdb::employeer::IdxID::search(m_trans_h,cursor_h,MCO_LE,10); ret = mco_cursor_first(m_trans_h,cursor_h); while(ret == MCO_S_OK) { uint2 len;

//从当前游标处构造对象 ret = obj.from_cursor(m_trans_h,cursor_h);

char name[20]={0}; obj.name_get(name,20,len); printf(“search user’s name is %s/n”,name);

ret = mco_cursor_next(m_trans_h,cursor_h);

} mco_trans_commit(m_trans_h); } void Update1() { mco_cursor_t my_cursor; mco_cursor_h cursor_h=&my_cursor; testdb::employeer obj;

MCO_RET ret = mco_trans_start(m_db_h,MCO_READ_WRITE,MCO_TRANS_FOREGROUND,&m_trans_h);

testdb::employeer::IdxID::cursor(m_trans_h,cursor_h); //查找id小于等于10的用户 ret = testdb::employeer::IdxID::search(m_trans_h,cursor_h,MCO_LE,10);

ret = mco_cursor_first(m_trans_h,cursor_h); while(ret == MCO_S_OK) { //从当前游标处构造对象 ret = obj.from_cursor(m_trans_h,cursor_h); int2 age; obj.age_get(age); age+=1; obj.age_put(age); //更新数据

ret = mco_cursor_next(m_trans_h,cursor_h);

} mco_trans_commit(m_trans_h); //提交事务 } //删除记录 void Remove1(int id) { MCO_RET ret = mco_trans_start(m_db_h,MCO_READ_WRITE,MCO_TRANS_FOREGROUND,&m_trans_h);

testdb::employeer obj; ret = testdb::employeer::IdxID::find(m_trans_h,id,obj);

if(ret == MCO_S_OK) { obj.remove(); //将查到的对象删除

} else if(ret = MCO_S_NOTFOUND) { printf(“can not find user id =%d /n”,id); } mco_trans_commit(m_trans_h); }

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档