`

mysql数据库导入Tokyo Cabinet的table数据库

阅读更多
#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 Key:Value数据库及其扩展应用

    Tokyo Cabinet提供五种不同类型的数据库,包括TCHDB(哈希数据库)、TCBDB(B+Tree数据库)、TCFDB(定长数据库)、TCTDB(表格数据库)和TCMDB(内存哈希数据库),以及TCNDB(内存B+Tree数据库)。其中,TCHDB因其...

    tokyo cabinet tyrant研究资料

    Tokyo Cabinet 和 Tokyo Tyrant 是一组开源的数据库管理系统,由日本公司 Resin Software 开发,主要用于数据存储和检索。这两个工具在IT领域中被广泛应用于日志管理、缓存服务、键值对存储等场景,尤其在需要快速...

    PHP tokyo cabinet扩展

    尝试开发PHP的扩展,仅用于学习。目前仅能够在windows下编译通过。 Linux下的tokyo cabinet API与Windows与差别,写的时候是在windows下,准备在linux下编译时才发现tokyo cabinet API在Unix下与Windows下是不一样的

    Tokyo-Cabinet.tar.gz

    TDB是Tokyo Cabinet中的一种数据库引擎,它提供了类似于Berkeley DB的接口。TDB支持多线程操作,允许并发读取,同时在事务处理方面提供了一定的保障,确保了数据的一致性。其B+树结构使得数据的插入、查找和删除操作...

    tokyocabinet-lua-1.10.tar.gz_TOKYO_Tokyo Cabinet

    Tokyo cabinet 是一个管理数据库的库。该数据库是一个单一的数据文件,每个记录为关键字和值。每个关键字和值是可变长度的字节序。二进制数据和字符串都可作为关键字或值。每个关键字必须唯一。没有数据表和数据类型...

    tokyocabinet-java-1.24.tar.gz_TOKYO_Tokyo Cabinet java_tokyocabi

    Tokyo cabinet 是一个管理数据库的库。该数据库是一个单一的数据文件,每个记录为关键字和值。每个关键字和值是可变长度的字节序。二进制数据和字符串都可作为关键字或值。每个关键字必须唯一。没有数据表和数据类型...

    Tokyo Cabinet-开源

    **东京内阁(Tokyo Cabinet)**是一款高效的开源数据库库,它源于QDBM并在此基础上进行了优化和提升。作为QDBM的升级版本,东京内阁在性能方面有着显著的改进,尤其在处理大量数据时,其速度表现更加出色,无需依赖...

    再说tokyocabinet 及其扩展

    标题“再说tokyocabinet 及其扩展”指的是对Tokyo Cabinet这一开源数据库系统的深入讨论,以及可能涉及的对其功能的增强或优化。Tokyo Cabinet是一款高效、轻量级的键值存储系统,广泛用于数据缓存和日志记录等场景...

    tokyocabinet-1.4.45.tar.gz

    Tokyo Cabinet是一个高效、轻量级且开源的数据库管理系统,主要设计用于在本地存储大量数据。这个名为"tokyocabinet-1.4.45.tar.gz"的压缩包文件包含的是Tokyo Cabinet的1.4.45版本源代码。在本文中,我们将深入探讨...

    tokyocabinet-1.4.47.tar.gz

    Tokyo Cabinet采用哈希表(Hash Table)、B+树(B+ Tree)和固定长度记录文件(Ft File)三种不同的数据结构,分别对应HDB、BDB和FDB三种数据库类型。这使得Tokyo Cabinet能够根据具体应用场景选择最合适的存储方式...

    nosql研发之路

    其中,键值存储数据库如Tokyo Cabinet/Tokyo Tyrant,以极高的读写速度著称,适合高速缓存和实时数据处理;文档数据库如MongoDB,以JSON文档形式存储数据,便于数据的检索和管理;列族存储数据库如HBase,适用于大...

    tokyo tyrant文档

    从这份文档中,我们可以深入理解Tokyo Tyrant及其关联的Tokyo Cabinet数据库的多个方面,包括其安装、使用、原理以及与其他数据库系统的性能比较。下面将详细解析这些关键知识点。 ### 1. Tokyo Tyrant与Tokyo ...

    tokyocabinet-1.4.48.tar.gz

    《Tokyo Cabinet:高效数据库管理库的探索》 Tokyo Cabinet,作为一个开源的、轻量级的数据库管理系统,因其高效、稳定以及易于使用的特点,在IT领域中被广泛应用。标题中的"tokyocabinet-1.4.48.tar.gz"表示的是...

    no关系型数据库,nosql

    2. Tokyo Cabinet & Tokyo Tyrant:Tokyo Cabinet是一个DBM风格的Key-Value数据库,而Tokyo Tyrant为其提供的网络接口,支持memcache协议和HTTP操作。Tokyo Cabinet具有高性能和多种存储引擎选择,Tokyo Tyrant则...

    TT使用指南,Tokey Trant

    #### Tokyo Cabinet与Tokyo Tyrant:高性能数据库解决方案 为了应对这些挑战,Tokyo Cabinet(简称TC)与Tokyo Tyrant(简称TT)应运而生,它们由日本开发者Hiroki Seki开发,旨在提供一种快速且高效的数据存储方案...

    tokyo-cabinet-cookbook:安装 Tokyo Cabinet 并为 ROMA 设置

    东京橱柜食谱 使用 Chef 安装东京橱柜。 支持的平台 支持以下平台: ...在节点的run_list包含tokyo-cabinet : { " run_list " : [ " recipe[tokyo-cabinet::default] " ] } 作者 作者:坂锐( )

    tokyoCabint及tokyoTyrant简介

    标题 "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`...

    BNRPersistence:一组使用Tokyo Cabinet来保存和加载Objective-C对象的类

    BNR持久性亚伦·希勒加斯(Aaron Hillegass) 2010年7月9日经过几年的抱怨,Core Data可能会变得更好,我认为我应该编写一个...安装首先,您需要下载Tokyo Cabinet: : (有一个sourceforge页面,但是最新的版本似乎

    NoSQL数据库探讨之一-为什么要用非关系数据库?.pdf

    NoSQL数据库的种类繁多,如Redis(内存数据结构存储)、Tokyo Cabinet(磁盘存储的键值数据库)、Cassandra(Facebook开发的分布式数据库)、MongoDB(文档型数据库)、HBase(Google Bigtable的开源实现)等,它们...

Global site tag (gtag.js) - Google Analytics