vc 將檔案存入mysql資料庫

2021-05-24 13:25:37 字數 2208 閱讀 1402

vc 將檔案存入mysql資料庫

2008-07-15 11:31

與mysql通訊,我選擇直接使用mysql的c api,可以非常方便快捷地對mysql進行操作,還可以輕鬆地實現跨平台,如果使用odbc,那麼在*nix下時,還得重寫一套**。

要存檔案的話,mysql中需要將對應的域設為blob或者longblob型別,如果是其它型別的話,比如text,存進去再取出來可能會丟失資料。mysql中插入blob,是通過insert語句實現的,它將檔案的二進位製流讀出來,然後轉義成可識別的ascii碼,這個工作由mysql_real_escape_string函式完成,然後再呼叫mysql_real_query做插入工作。

需要注意的是,這裡必須呼叫mysql_real_query,mysql的手冊中這樣描述:

you must use mysql_real_query() rather than mysql_query() for queries that contain binary data, because binary data may contain the 『/0』 character. in addition, mysql_real_query() is faster than mysql_query() because it does not call strlen() on the query string.

講了這麼多了,下面附乙個我寫的函式例子, 注意這個函式是純c寫的,與c++沒有關聯:

int my_upload_blob(mysql* db, const char* filepath, const char* cmd_prev, int prev_len, const char* cmd_next, int next_len)

data    = malloc(1000*1024);            /* 1m */

chunk = malloc(2*1000*1024+1);    /* 2m */

query = malloc(1024*5000);       /* 5m */

pos    = query;

size = fread(data, 1, 1024*1000, fp);

size = mysql_real_escape_string(db, chunk, data, size);

/* copy sql to query */

len = prev_len;

strncpy(query, cmd_prev, len);

pos = query + len;

/* copy binary file data to query */

*pos++ = '/'';

strncpy(pos, chunk, size);

pos += size;

*pos++ = '/'';    

/* if next is not null, a comma is needed */

if (cmd_next)

/* copy sql to query */

len = next_len;

strncpy(pos, cmd_next, len);

pos += len;

/* should call mysql_real_query */

if (0 != mysql_real_query(db, query, pos - query))

free(data);

free(chunk);

free(query);

fclose(fp);

return 0;

}

int my_download_blob(mysql* db, char* filepath, char* cmd, int field_pos)

if (0 != mysql_query(db, cmd))

mysql_res* _res = mysql_store_result(db);

mysql_row _row = mysql_fetch_row(_res);

if (null == _res)

lengths = mysql_fetch_lengths(_res);

fwrite(row[field_pos], lengths[field_pos], 1, fp);

fclose(fp);

mysql_free_result(_res);

return 0;

}

如何將檔案轉成流存入資料庫

stream filedatastream myfile.postedfile.inputstream 得到檔案大小 int filelength myfile.postedfile.contentlength 建立陣列 byte filedata new byte filelength 把檔案流填...

PHP 匯入excel,將資料存入資料庫

一.前端 1 基於boostrap的bootstrapdialog 匯入excel btnexcel add click function else 獲取 的大小,限制上傳 的大小5m file size files myfile size if file size 5 1024 1024 限制上傳...

mysql將字串切割後存入資料庫

delimiter 定義乙個分1號替換符代表 號 use test 指定資料庫 drop procedure ifexists split 刪除該函式 建立儲存過程 create procedure split in string varchar 300 begin 求分割符號 的位置 declar...