环境: CentOS 6.4 32位
注意:
64位运行有问题,运行最后会报 segmentation fault,所以最后采用32位操作系统。
1.1 安装
(1) 安装需要的依赖
yum install gcc make gcc-c++ wget
(2) 下载源码
wget http://www.garret.ru/fastdb-3.76.tar.gz
(3) 解压
tar -xvf fastdb-3.76.tar.gz
(4) 切换到目录
cd fastdb
(5) 配置安装目录 /opt/fastdb
./configure --prefix=/opt/fastdb
(6) 编译
make -j16
(7) 安装
make install
(8) 注意事项
Linux下运行程序提示:
Incompatibility between headers and library
fastdb会假设绝大多数的Linux版是64-bit,如果你的机子是32-bit的,必须将config.h文件的如下内容注释掉:
// #if !defined(_WIN32) || defined(_WIN64) // most unixes are now 64-bit, while 32-bit windows is still quite popular
// #define LARGE_DATABASE_SUPPORT
// #endif
然后重新编译和安装即可。
1.2 配置
需要配置库的路径,程序才能正常找到库文件。
(1) 打开文件
vi /etc/ld.so.conf.d/fastcb_libs.conf
(2) 添加 fast 动态库路径
/opt/fastdb/lib
(3) 应用立即生效
sudo /sbin/ldconfig
(4) 查看是否生效
ldconfig -v | grep "fastdb"
(1) 代码
#include "fastdb.h"
#include <stdio.h>
USE_FASTDB_NAMESPACE
class Record
{
public:
Record(){}
~Record(){}
public:
int4 id; // id 作为主键唯一标识
int4 value; // value 作为保存值
TYPE_DESCRIPTOR( ( KEY( id, HASHED ),
FIELD( value ) ) );
};
// 创建 Record 数据表
REGISTER(Record);
const int g_Records = 5;
//! 插入数据
void insertRecord()
{
printf("####### insertRecord #######\n");
for ( int4 i = 1; i < g_Records; i++ )
{
Record rec;
rec.id = i;
rec.value = i * i;
printf("%d---%d\n", rec.id, rec.value);
// 插入数据
insert( rec );
}
}
//! 更新数据
void updateRecord()
{
printf("####### updateRecord #######\n");
dbCursor<Record> cursorWrite(dbCursorForUpdate); // 写游标对象 dbCursorForUpdate
int n = cursorWrite.select(); // 查询
// 存在记录, 进行加1更新
if(0 < n)
{
do
{
cursorWrite->value = cursorWrite->value + 1;
cursorWrite.update();
}while(cursorWrite.next()); // next() 游标向后滚
}
}
//! 删除某条记录
void removeRecord(const int id)
{
printf("####### removeRecord #######\n");
dbQuery q; // 查询语句
dbCursor<Record> cursorWrite(dbCursorForUpdate); // 写游标对象 dbCursorForUpdate
q = "id =", id;
int n = cursorWrite.select(q); // 查询
// 存在记录
if(0 < n)
{
do
{
cursorWrite.removeAllSelected();
}while(cursorWrite.next()); // next() 游标向后滚
}
}
//! 删除所有数据
void removeAllRecord()
{
printf("####### removeAllRecord #######\n");
dbCursor<Record> cursorWrite(dbCursorForUpdate); // 写游标对象 dbCursorForUpdate
cursorWrite.removeAll(); // 这里进行清除, 不清除会进行累加
}
//! 查询数据
void selectRecord()
{
printf("####### selectRecord #######\n");
dbCursor<Record> cursorRead; // 只读游标对象
int n = cursorRead.select(); // 查询
// 存在记录
if(0 < n)
{
do
{
printf("%d---%d---%d\n", n, cursorRead->id, cursorRead->value);
}while(cursorRead.next()); // next() 游标向后滚
}
}
int main(int argc, char* argv[])
{
dbDatabase db;
// 打开数据库 testpar
if (db.open(_T("testpar")))
{
// 插入数据
insertRecord();
// 提交
db.commit();
// 查询数据
selectRecord();
// 更新数据加1
updateRecord();
// 提交
db.commit();
// 查询数据
selectRecord();
// 删除数据
removeRecord(1);
// 提交
db.commit();
// 查询数据
selectRecord();
// 删除所有数据
removeAllRecord();
// 提交
db.commit();
// 查询数据
selectRecord();
// 关闭数据库
db.close();
}
return 0;
}
(2) 编译
g++ example.cpp -o example -I/opt/fastdb/include/fastdb -L/opt/fastdb/lib -lfastdb
(3) 运行结果
如果运行有问题,请查看注意事项
[root@livecd example]# ./example
####### insertRecord #######
1---1
2---4
3---9
4---16
####### selectRecord #######
4---1---1
4---2---4
4---3---9
4---4---16
####### updateRecord #######
####### selectRecord #######
4---1---2
4---2---5
4---3---10
4---4---17
####### removeRecord #######
####### selectRecord #######
3---2---5
3---3---10
3---4---17
####### removeAllRecord #######
####### selectRecord #######