程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql上將文本上數據批量導入數據庫c語言實現(CAPI)

mysql上將文本上數據批量導入數據庫c語言實現(CAPI)

編輯:MySQL綜合教程

mysql上將文本上數據批量導入數據庫c語言實現(CAPI)


其實原理很簡單,想必大家應該都看了我寫的那篇(一個代碼學會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('%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  

思想很簡單

 

結果:

啟動查找表格結果

\

建立被導入數據的表和顯示內容

\

執行插入程序:

\

查看插入後的表的內容

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved