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