首页 >数据库 >mysql教程 >mysql上将文本上数据批量导入数据库c语言实现(CAPI)_MySQL

mysql上将文本上数据批量导入数据库c语言实现(CAPI)_MySQL

WBOY
WBOY原创
2016-06-01 13:04:331322浏览

其实原理很简单,想必大家应该都看了我写的那篇(一个代码学会c语言操作数据库)linux上通过c语言操作数据库实现基本的学生信息管理系统(增、删、查、改‘显示) http://blog.csdn.net/guoqianqian5812/article/details/41381645博文,那么大家肯定知道怎么完成插入一个学生信息的,只要大家知道那么下面批量将输入导入数据库就很好实现了,这个方法就是在通过fgets函数读取文件里的内容,每读取一行,然后用strtok函数将其分割开,获取有用的数据段传到C API函数哪里(insert函数),然后用sprintf函数将其格式化写入执行语句下面就和c语言操作数据库的“增”一样了。

代码如下:

[plain] view plaincopyprint?
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <mysql.h>  
  
MYSQL mysql;  
        /******通过insert into命令将数据批量导入数据库******/  
void insert(char *a,char *b,char *c)  
{  
    int t,r;  
    char query[400];   
    memset(query,0,400);  
    sprintf(query,"insert into EnglishWord4(Words,Translate,Num) values(&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;)",a,b,c);//插入哪个表  
    printf("正在执行:%s\n",query);  
    t=mysql_real_query(&mysql,query,(unsigned int)strlen(query));  
    if(t)  
    {  
      printf("执行插入时出现异常: %s",mysql_error(&mysql));  
    }  
    else  
    {  
        printf("添加成功\n");  
    }  
}  
int main()  
{     
    FILE *fp;  
    char buff[300];  
    fp=fopen("englishword4.txt","r");//打开不同的文件  
    if(fp==NULL)  
    {  
        printf("Fail to open\n");  
        exit(1);  
    }     
    MYSQL_RES *res;  
    MYSQL_ROW row;   
    mysql_init(&mysql);  
    if (!mysql_real_connect(&mysql,"localhost", "root", NULL, "English",0,NULL,0))  
    {  
  
        printf( "Error connecting to database: %s",mysql_error(&mysql));  
  
    }  
    else  
    {  
        printf("Connected...\n");  
    }  
    char *p;  
    char a[20];  
    char b[200];  
    char c[10];  
    int length = 0;  
    while(fgets(buff,300,fp)!=NULL)  
    {  
        if(buff[strlen(buff)-1]==&#39;\n&#39;)  
        {  
            buff[strlen(buff)]=&#39;\0&#39;;   
        }  
        strcpy(a,strtok(buff,"#"));  
        int i=0;  
        while((p=strtok(NULL,"#")))  
        {  
            if(i==0)  
            {  
                //printf("跳过\n");  
            }  
            if(i==1)  
            {  
                strcpy(b,p);  
                  
            }  
            if(i==2)  
            {  
                strcpy(c,p);  
            }  
            ++i;  
        }  
        length = strlen(c);  
        c[length-2]=&#39;\0&#39;;  
        insert(a,b,c);  
        bzero(a,sizeof(a));  
        bzero(b,sizeof(b));  
        bzero(b,sizeof(c));  
          
    }  
    mysql_close(&mysql);  
    fclose(fp);  
    return 0;  
}  

 

附加一个操作的表大家可以试试,这是我的格式

[plain] view plaincopyprint?
a#[ei]#art. 一;任一;每一#1  
able#[&#39;eibl]#adj. 能#1  
about#[&#601;&#39;baut]#prep. 关于#1  
above#[&#601;&#39;b&#652;v]#prep. 在...上面 #1  
act#[&aelig;kt]#vt. 行动#1  
add#[&aelig;d]#vi. 加;增加#1  
afraid#[&#601;&#39;freid]#adj. 害怕的#1  
after#[&#39;ɑ:ft&#601;]#adv. 后来#1  
again#[&#601;&#39;ɡen]#adv.再一次#1  
against#[&#601;&#39;ɡenst]#prep. 反对#1  
age#[eid&#658;]#n. 年龄#1  
ago#[&#601;&#39;ɡ&#601;u]#adv. 以前#1  
agree#[&#601;&#39;ɡri:]#vt. 同意;赞成#1  
air#[&epsilon;&#601;]#n. 空气#1  
all#[&#596;:l]#adj. 全部的 n. 全部#1  
allow#[&#601;&#39;lau]#vt. 允许#1  
also#[&#39;&#596;:ls&#601;u]#adv. 也#1  
always#[&#39;&#596;:lweiz]#adv. 总是;永远#1  
am#[&aelig;m]#v. 是#1  
among#[&#601;&#39;m&#652;&#331;]#prep. 在&hellip;中间;在&hellip;之中#1  
an#[&aelig;n]#art. 一(在元音字母前)#1  
and#[&aelig;nd]#conj. 和#1  
anger#[&#39;&aelig;&#331;ɡ&#601;]#n. 怒;愤怒;忿怒#1  
animal#[&#39;&aelig;nim&#601;l]#n. 动物#1  
answer#[&#39;ɑ:ns&#601;]#vt. 回答#1  
any#[&#39;eni]#adj. 任何的#1  
appear#[&#601;&#39;pi&#601;]#vi. 出现#1  
apple#[&#39;&aelig;pl]#n. 苹果;家伙#1  
are#[ɑ:]#v. 是(be的第二人称单复数现在式)#1  
area#[&#39;&epsilon;&#601;ri&#601;]#n. 区域#1  
arm#[ɑ:m]#n. 手臂#1  
arrange#[&#601;&#39;reind&#658;]#vt. 安排#1  
arrive#[&#601;&#39;raiv]#vi. 到达#1  
art#[ɑ:t]#n. 艺术#1  
as#[&aelig;z]#conj. 因为#1  
ask#[ɑ:sk]#vt. 问#1  
at#[&aelig;t]#prep. 在#1  
atom#[&#39;&aelig;t&#601;m]#n. 原子#1  

思想很简单

 

结果:

启动查找表格结果

\

建立被导入数据的表和显示内容

\

执行插入程序:

\

查看插入后的表的内容

\

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn