SQLite中如何用api操作blob类型的字段
在实际的编程开发当中我们经常要处理一些大容量二进制数据的存储,如图片或者音乐等等。对于这些二进制数据(blob字段)我们不能像处理普通的文本那样简单的插入或者查询,为此SQLite提供了一组函数来处理这种BLOB字段类型。下面的代码演示了如何使用这些API函数。
首先我们要建立一个数据库: sqlite3_exec(db,"CREATE TABLE list (fliename varchar(128) UNIQUE,fzip blob);",&zErrMsg); //由于mmmm.rar是一个二进制文件,所以要在使用insert语句时先用?号代替 sqlite3_prepare(db,"insert into list values ('mmmm.rar',?);",-1,&stat,0); FILE *fp; longfilesize = 0; char* ffile; fp = fopen("mmmm.rar","rb"); if(fp != NULL) { //计算文件的大小 fseek(fp,SEEK_END); filesize = ftell(fp); fseek(fp,SEEK_SET); //读取文件 ffile =newchar[filesize+1]; size_t sz = fread(ffile,sizeof(char),filesize+1,fp); fclose(fp); } //将文件数据绑定到insert语句中,替换“?”部分 sqlite3_bind_blob(stat,1,ffile,filesize,NULL); //执行绑定之后的SQL语句 sqlite3_step(stat); 这时数据库当中已经有了一条包含BLOB字段的数据。接下来我们要读取这条数据:
//选取该条数据 sqlite3_prepare(db,"select * from list;",0); sqlite3_step(stat); //得到纪录中的BLOB字段 constvoid* test = sqlite3_column_blob(stat,1); //得到字段中数据的长度 intsize = sqlite3_column_bytes(stat,1); //拷贝该字段 sprintf(buffer2,"%s",test); 此时可以将buffer2写入到文件当中,至此BLOB数据处理完毕。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |