sqlite3的图片的(二进制数据)存取操作
来源:互联网 发布:jquery 对象数组排序 编辑:程序博客网 时间:2024/05/18 00:59
sqlite3的二进制存取操作
前言
上篇介绍了sqlite3的一些常用插入操作方法和注意事项,在实际项目中遇到了图片缓存的问题,由于服务器不是很稳定,且受到外界环境的干扰(例如断电,图片存储挂掉),一个数据结构中除了普通字段(int string),还包括图片数据,所以还需要将图片数据进行缓存,图片缓存与普通的数据库字段值缓存有所不同,下面介绍一下简单方法。
sqlite3支持对二进制数据的缓存,在实际的编程开发当中我们经常要处理一些大容量二进制数据的存储,如图片、音乐、视频等等。对于这些二进制数据,我们不能像处理普通的文本那样,但是我们可以用blob来存储。sqlite官方文档https://www.sqlite.org/datatype3.html#section_1对blob 字段的解释是
BLOB. The value is a blob of data, stored exactly as it was input。
即数据不做任何转换,以输入形式存储。因此 BOLB通常用来存储二进制大对象。
sqlite3_bind_blob示例代码
char* cmdCreatBlobTable = "create table SqliteBlobTest (id integer , pic blob); //首先创建一个可插入blob类型的表 。 sqlite3* db = NULL; char * errorMessage = NULL; int iResult = sqlite3_open("SqliteTest.db", &db); sqlite3_exec(db,"drop table if exists SqliteBlobTest",0,0,0); iResult = sqlite3_exec(db, cmdCreatBlobTable, NULL, NULL, &errorMessage); if (SQLITE_OK != iResult) { cout<<"创建表SqliteBlobTest失败"<<endl; break; } sqlite3_stmt *stmt; //声明 const char* sql = "insert into SqliteBlobTest values(1,?)"; char* pPicData = "this is a pic data" ; sqlite3_prepare(db,sql,strlen(sql),&stmt,0); //完成对sql语句的解析 { sqlite3_bind_blob(stmt,1,pPicData, strlen(pPicData), NULL);//1代表第一个? sqlite3_step(stmt); //将数据写入数据库中 } sqlite3_prepare(db, "select * from SqliteBlobTest", -1, &stmt, 0); int result = sqlite3_step(stmt); int id = 0,len = 0; char picData[128] = {0}; if (result == SQLITE_ROW) //查询成功返回的是SQLITE_ROW { cout<<"read success from sqlite"<<endl; id = sqlite3_column_int(stmt, 0); //从0开始计算,id为0,picdata 为1; const void * pReadPicData = sqlite3_column_blob(stmt, 1); //读取数据,返回一个指针 len = sqlite3_column_bytes(stmt, 1); //返回数据大小 memcpy(picData, pReadPicData, len); //把数据拷贝出来 } else { cout<<"read fail from sqlite"<<endl; } sqlite3_finalize(stmt); //把刚才分配的内容析构掉 cout<<id<<" "<<picData<<endl;
测试结果
2016/6/11 15:07:22
0 0
- sqlite3的图片的(二进制数据)存取操作
- sqlite3的图片的(二进制数据)存取操作
- SQlite3 二进制数据(BLOB)的存取【基于wxSqlite3的封装的操作】
- sqlite3 操作 图片的存取、中文字符处理
- 基于winform的二进制图片数据的存取(用于数据库照片的读写处理)
- Sqlite3 操作二进制数据
- sqlite3的数据操作
- 图片二进制数据库的存取和读取...
- PHP 图片的二进制存取 (Mysql)
- 文本与二进制内容的存取操作
- MySQL中的二进制数据的存取
- ByteBuffer之二进制数据的存取
- android操作sqlite3的blob字段,显示数据中的图片
- 以二进制的形式从数据库中存取图片
- C++使用SQLite3心得 -- sqlite3以二进制形式存取图片(MFC,CppSQLite3U封装类)
- C++使用SQLite3心得 -- sqlite3以二进制形式存取图片(MFC,CppSQLite3U封装类)
- C++实现string存取二进制数据的方法
- 使用C#向Sql Sever中存取网络图片和本地图片(二进制流的形式)
- 最长回文子串、最长回文子序列、回文子序列个数
- Centos6.5下Redis安装、主从配置、卸载教程
- C002-CPP-Luhn公式
- QT QPushButton 通过stylesheet 设置样式
- onvif设备发现代码利用海思carm-hisiv100nptl-linux-g++ 交叉编译器编译时出现如下问题,有人可以解答下吗
- sqlite3的图片的(二进制数据)存取操作
- [Java学习] Java中Hashtable类与HashMap类的区别详解
- WideCharToMultiByte和MultiByteToWideChar函数的用法
- 源码寻找
- 学习整合hibernate springmvc spring的 心得(2)
- onvif 服务端设备发现在linux上运行不会报错,但是交叉编译运行在嵌入式开发板上是会报错
- 再说 Oracle RAC services
- 在springmvc配置文件里面写默认的注解映射的支持的时候:<mvc:annotation-driven />The prefix "mvc" for element "mvc:annotation
- 浏览器的工作原理:新式网络浏览器幕后揭秘