#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <mysql/mysql.h>
#include <tcutil.h>
#include <tctdb.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>
#define DB_HOST "127.0.0.1"
#define DB_USER "root"
#define DB_PASS ""
#define DB_NAME "test"
#define DB_PORT 3307
int main(int argc, char **argv)
{
MYSQL mysql;
MYSQL_RES *tbl_list_result;
MYSQL_RES *tbl_record_result;
MYSQL_ROW tbl_list_row;
MYSQL_ROW tbl_record_row;
MYSQL_FIELD *tbl_record_fields;
unsigned int tbl_list_num_fields;
unsigned int tbl_record_num_fields;
unsigned int i;
unsigned int j;
char tdb_name[255];
char sql_buf[2000];
TCTDB *tdb;
int ecode, pksiz;
char pkbuf[256];
TCMAP *cols;
mysql_init(&mysql);
if(!mysql_real_connect(&mysql,DB_HOST,DB_USER,DB_PASS,DB_NAME,DB_PORT,NULL,0))
{
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(&mysql));
}
mysql_query(&mysql,"SET NAMES utf8");
if(mysql_query(&mysql,"SHOW TABLES"))
{
fprintf(stderr,"query failed:%s",mysql_error(&mysql));
}
tbl_list_result = mysql_store_result(&mysql);
tbl_list_num_fields = mysql_num_fields(tbl_list_result);
while((tbl_list_row = mysql_fetch_row(tbl_list_result)))
{
for(i = 0; i < tbl_list_num_fields; i++)
{
/* 创建一个数据库对象 */
tdb = tctdbnew();
memset(&tdb_name,0,sizeof(tdb_name));
sprintf(tdb_name,"%s_%s.tdb",DB_NAME,tbl_list_row[i]);
/* 打开数据库对象 */
if(!tctdbopen(tdb, tdb_name, TDBOWRITER | TDBOCREAT))
{
ecode = tctdbecode(tdb);
fprintf(stderr, "open error: %s\\n", tctdberrmsg(ecode));
}
sprintf(sql_buf,"SELECT * FROM %s",tbl_list_row[i]);
if(mysql_query(&mysql,sql_buf))
{
fprintf(stderr,"query failed:%s",mysql_error(&mysql));
}
tbl_record_result = mysql_store_result(&mysql);
tbl_record_num_fields = mysql_num_fields(tbl_record_result);
tbl_record_fields = mysql_fetch_fields(tbl_record_result);
while((tbl_record_row = mysql_fetch_row(tbl_record_result)))
{
cols = tcmapnew();
for(j = 0; j < tbl_record_num_fields; j++)
{
if(tbl_record_row[j] == '\0')
{
tcmapput2(cols, tbl_record_fields[j].name, "");
}
else
{
tcmapput2(cols, tbl_record_fields[j].name, (char *)tbl_record_row[j]);
}
if(IS_PRI_KEY(tbl_record_fields[j].flags))
{
pksiz = sprintf(pkbuf, "%s",tbl_record_row[j]);
}
if (tbl_record_fields[j].type == MYSQL_TYPE_VAR_STRING)
{
//printf("%s is varchar\n",tbl_record_fields[j].name);
}
}
/* 插入新纪录 */
if(!tctdbput(tdb, pkbuf, pksiz, cols))
{
ecode = tctdbecode(tdb);
fprintf(stderr, "put error: %s\\n", tctdberrmsg(ecode));
}
tcmapdel(cols);
}
mysql_free_result(tbl_record_result);
/* 关闭数据库 */
if(!tctdbclose(tdb))
{
ecode = tctdbecode(tdb);
fprintf(stderr, "close error: %s\\n", tctdberrmsg(ecode));
}
/* *销毁数据库对象 */
tctdbdel(tdb);
}
}
mysql_free_result(tbl_list_result);
mysql_close(&mysql);
return 0;
}
分享到:
相关推荐
Tokyo Cabinet提供五种不同类型的数据库,包括TCHDB(哈希数据库)、TCBDB(B+Tree数据库)、TCFDB(定长数据库)、TCTDB(表格数据库)和TCMDB(内存哈希数据库),以及TCNDB(内存B+Tree数据库)。其中,TCHDB因其...
Tokyo Cabinet 和 Tokyo Tyrant 是一组开源的数据库管理系统,由日本公司 Resin Software 开发,主要用于数据存储和检索。这两个工具在IT领域中被广泛应用于日志管理、缓存服务、键值对存储等场景,尤其在需要快速...
尝试开发PHP的扩展,仅用于学习。目前仅能够在windows下编译通过。 Linux下的tokyo cabinet API与Windows与差别,写的时候是在windows下,准备在linux下编译时才发现tokyo cabinet API在Unix下与Windows下是不一样的
TDB是Tokyo Cabinet中的一种数据库引擎,它提供了类似于Berkeley DB的接口。TDB支持多线程操作,允许并发读取,同时在事务处理方面提供了一定的保障,确保了数据的一致性。其B+树结构使得数据的插入、查找和删除操作...
Tokyo cabinet 是一个管理数据库的库。该数据库是一个单一的数据文件,每个记录为关键字和值。每个关键字和值是可变长度的字节序。二进制数据和字符串都可作为关键字或值。每个关键字必须唯一。没有数据表和数据类型...
Tokyo cabinet 是一个管理数据库的库。该数据库是一个单一的数据文件,每个记录为关键字和值。每个关键字和值是可变长度的字节序。二进制数据和字符串都可作为关键字或值。每个关键字必须唯一。没有数据表和数据类型...
**东京内阁(Tokyo Cabinet)**是一款高效的开源数据库库,它源于QDBM并在此基础上进行了优化和提升。作为QDBM的升级版本,东京内阁在性能方面有着显著的改进,尤其在处理大量数据时,其速度表现更加出色,无需依赖...
标题“再说tokyocabinet 及其扩展”指的是对Tokyo Cabinet这一开源数据库系统的深入讨论,以及可能涉及的对其功能的增强或优化。Tokyo Cabinet是一款高效、轻量级的键值存储系统,广泛用于数据缓存和日志记录等场景...
Tokyo Cabinet是一个高效、轻量级且开源的数据库管理系统,主要设计用于在本地存储大量数据。这个名为"tokyocabinet-1.4.45.tar.gz"的压缩包文件包含的是Tokyo Cabinet的1.4.45版本源代码。在本文中,我们将深入探讨...
Tokyo Cabinet采用哈希表(Hash Table)、B+树(B+ Tree)和固定长度记录文件(Ft File)三种不同的数据结构,分别对应HDB、BDB和FDB三种数据库类型。这使得Tokyo Cabinet能够根据具体应用场景选择最合适的存储方式...
其中,键值存储数据库如Tokyo Cabinet/Tokyo Tyrant,以极高的读写速度著称,适合高速缓存和实时数据处理;文档数据库如MongoDB,以JSON文档形式存储数据,便于数据的检索和管理;列族存储数据库如HBase,适用于大...
从这份文档中,我们可以深入理解Tokyo Tyrant及其关联的Tokyo Cabinet数据库的多个方面,包括其安装、使用、原理以及与其他数据库系统的性能比较。下面将详细解析这些关键知识点。 ### 1. Tokyo Tyrant与Tokyo ...
《Tokyo Cabinet:高效数据库管理库的探索》 Tokyo Cabinet,作为一个开源的、轻量级的数据库管理系统,因其高效、稳定以及易于使用的特点,在IT领域中被广泛应用。标题中的"tokyocabinet-1.4.48.tar.gz"表示的是...
2. Tokyo Cabinet & Tokyo Tyrant:Tokyo Cabinet是一个DBM风格的Key-Value数据库,而Tokyo Tyrant为其提供的网络接口,支持memcache协议和HTTP操作。Tokyo Cabinet具有高性能和多种存储引擎选择,Tokyo Tyrant则...
#### Tokyo Cabinet与Tokyo Tyrant:高性能数据库解决方案 为了应对这些挑战,Tokyo Cabinet(简称TC)与Tokyo Tyrant(简称TT)应运而生,它们由日本开发者Hiroki Seki开发,旨在提供一种快速且高效的数据存储方案...
东京橱柜食谱 使用 Chef 安装东京橱柜。 支持的平台 支持以下平台: ...在节点的run_list包含tokyo-cabinet : { " run_list " : [ " recipe[tokyo-cabinet::default] " ] } 作者 作者:坂锐( )
标题 "tokyoCabinet及tokyoTyrant简介" 指向了两个与数据库管理相关的开源工具,Tokyo Cabinet和Tokyo Tyrant。这两个工具由日本开发者开发,主要用于小型到中型的数据存储,尤其适合那些对数据读写速度有较高要求的...
例如,如果要连接到一个MySQL数据库,那么配置文件可能包含如下内容: ``` [Database] Type=MySQL Server=127.0.0.1 Port=3306 Database=mydatabase User=myusername Password=mypassword ``` 在确保`config.ini`...
BNR持久性亚伦·希勒加斯(Aaron Hillegass) 2010年7月9日经过几年的抱怨,Core Data可能会变得更好,我认为我应该编写一个...安装首先,您需要下载Tokyo Cabinet: : (有一个sourceforge页面,但是最新的版本似乎
NoSQL数据库的种类繁多,如Redis(内存数据结构存储)、Tokyo Cabinet(磁盘存储的键值数据库)、Cassandra(Facebook开发的分布式数据库)、MongoDB(文档型数据库)、HBase(Google Bigtable的开源实现)等,它们...