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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值