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...