前段時(shí)間在做一款嵌入式項(xiàng)目,用到了SQLite數(shù)據(jù)庫,現(xiàn)在就SQLite數(shù)據(jù)庫中存取圖片問題來與大家共享一下,
對于二進(jìn)制數(shù)據(jù)我們自然是不能夠直接進(jìn)行存儲(chǔ),在SQLite中我們可以將其轉(zhuǎn)換而后存儲(chǔ)。 下面就言歸正傳 在對主句操作之前我們先要打開數(shù)據(jù)庫,SQLite給用戶提供了豐富的API,足以使我們來駕馭它, 利用sqlite3_open()函數(shù),打開我們所要操作的數(shù)據(jù)庫, 接下來就是對于我們的圖片文件的操作了,我在這里的方法便是將圖片文件轉(zhuǎn)換成字符流,而后進(jìn)行存儲(chǔ)。 下面我就以一個(gè)簡單的范例來說明問題吧.....
#include <stdio.h> #include <sqlite3.h> #include <stdlib.h> static sqlite3 *db=NULL; static sqlite3_stmt *stmt=NULL; FILE *fp; long filesize=0; char *fflie;
int main(int argc, char *argv[]) { int rc,i,j; rc = sqlite3_open("dishes.db", &db); rc = sqlite3_prepare(db, "update dishes_table set dish_image=?where dish_name='x';", -1, &stmt, 0); fp=fopen("x.jpg","rb"); if(fp != NULL) { fseek(fp, 0, SEEK_END); filesize = ftell(fp); fseek(fp, 0, SEEK_SET); ffile = (char *)malloc(filesize + 1); size_t sz = fread(ffile, sizeof(char), filesize+1, fp); fclose(fp); } sqlite3_bind_blob(stmt, 1, ffile, filesize, NULL); rc=sqlite3_step(stmt); free(ffile); sqlite3_finalize(stmt); sqlite3_close(db); return 0; }
|