SQLite中如何用api操作blob类型的字段
来源:互联网 发布:gta5需要启动网络 编辑:程序博客网 时间:2024/05/16 09:15
在实际的编程开发当中我们经常要处理一些大容量二进制数据的存储,如图片或者音乐等等。对于这些二进制数据(blob字段)我们不能像处理普通的文本那样简单的插入或者查询,为此SQLite提供了一组函数来处理这种BLOB字段类型。下面的代码演示了如何使用这些API函数。
首先我们要建立一个数据库:
sqlite3_exec(db, "CREATE TABLE list (fliename varchar(128) UNIQUE, fzip blob);", 0, 0, &zErrMsg);
//由于mmmm.rar是一个二进制文件,所以要在使用insert语句时先用?号代替
sqlite3_prepare(db, "insert into list values ('mmmm.rar',?);", -1, &stat, 0);
FILE *fp;
long filesize = 0;
char * ffile;
fp = fopen("mmmm.rar", "rb");
if(fp != NULL)
{
//计算文件的大小
fseek(fp, 0, SEEK_END);
filesize = ftell(fp);
fseek(fp, 0, SEEK_SET);
//读取文件
ffile = new char[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;", -1, &stat, 0);
sqlite3_step(stat);
//得到纪录中的BLOB字段
const void * test = sqlite3_column_blob(stat, 1);
//得到字段中数据的长度
int size = sqlite3_column_bytes(stat, 1);
//拷贝该字段
sprintf(buffer2, "%s", test);
此时可以将buffer2写入到文件当中,至此BLOB数据处理完毕。
- SQLite中如何用api操作blob类型的字段
- SQLite中如何用api操作blob类型的字段
- SQLite中如何用api操作BLOB类型的字段
- SQLite中如何用api操作BLOB类型的字段
- 如何用SQL操作oracle的blob字段里的字符串数据!
- 如何用JSP处理Oracle中CLOB类型的字段
- 如何用JSP处理Oracle中CLOB类型的字段
- 如何用jsp处理Oracle中CLOB类型的字段
- 如何用java更新oracle的blob字段
- MYSQL中如何用JDBC存取BLOB类型?
- QT Sqlite BLOB类型操作
- Oracle中BLOB字段的操作
- JAVA对Oracle中BLOB、CLOB类型字段的操作说明
- JAVA对Oracle中BLOB、CLOB类型字段的操作说明
- 如何用Revit API从无到有创建构建的类型对象?
- 如何用Revit API获取Conduit、FlexPipe的类型
- 使用JDBC操作基于Oracle的CLOB,BLOB字段类型
- 关于Oracle9i中BLOB类型的操作
- RAC4——架构和变化
- Discuz X2 数据库连接文件和参数介绍
- 数据连接池+图解
- JAVA NIO总结(四)—网络和异步IO
- 前端开发相关的学习网站
- SQLite中如何用api操作blob类型的字段
- Android与iOS:谁更适合HTML 5?
- qt creator 2.5.2 +qt library 4.8.2+mingw4.4 配置说明
- javase正则表达式入门
- Java io流(2)
- Delphi结束指定进程...
- [sig12][PBS]Farcry3的物理光照
- hdoj1005
- Error(1.0.5 1107071739): D:\SAE_SDK_Windows_1.0.5\apps\/divjs/1/config.yaml is not existed解决方法