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




你可能感兴趣的:(sql,mysql,J#)