欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

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

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

代码如下:

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

思想很简单

结果:

启动查找表格结果

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

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

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

执行插入程序:

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

查看插入后的表的内容

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