有时我们用数据库存储文件,需要用到二进制字段,下面列常用方法。

1.写二进制数据

sqlite3 * db;

int result;

char **errmsg =NULL;

result = sqlite3_open("test.db", &db );

if( result != SQLITE_OK )

{ return -1;}

result = sqlite3_exec( db,"create table tb( ID integer, content  blob)", NULL, NULL, errmsg);

if(result != SQLITE_OK){printf("erro");}

char *buffer;//要写的二进内容,也可以从文件读出来

buffer=new char[1024*1024];

for(int i=0;i<1024*1024;i++)buffer[i]='a';

sqlite3_stmt  *stat;//写二进制数据时要用的结构

sqlite3_prepare( db, "insert into tb( ID,  content) values( 10, ? )", -1, &stat, 0 );//准备插入数据

sqlite3_bind_blob( stat, 1, buffer, strlen(buffer), NULL ); //把内容和字段绑定

result=sqlite3_step( stat );//执行

sqlite3_finalize( stat );释放内存

sqlite3_close( db );

2.读二进制数据

 这里重点介绍一下sqlite3_blob_open函数

这个函数用于打开二进制字段数据

第一个参数是数据库句柄

第二个参数是数据库名

第三个参数是表名

第四个参数是二进制数据字段(列)名

第五个参数是行数,也就是打开第几行的字段。

第六个

第七个参数是二进制文件句柄

用这个函数打二进制字段就像打开文件一样简单。

下面为例子代码:

sqlite3 * db;

int result;

char **errmsg =NULL;

result = sqlite3_open("test.db", &db );

if( result != SQLITE_OK )

{ return -1;}

int rf= sqlite3_blob_open(db,NULL,"Tbl_2","file_content",1,1,&sqlite3_blob);

if(rf!= SQLITE_OK)return –1;

int len=sqlite3_blob_bytes(sqlite3_blob);//得到二进数据长度

sqlite3_blob_read(sqlite3_blob,buffer,len,0); 读二进数据,最后一个参数为起始位置

//如果不想读全部内容,可以设置这个参数

sqlite3_blob_close(sqlite3_blob);//关闭

sqlite3_close( db );

3.几个问题

a.       sqlite3_blob_open函数第五个参数读第几行的数据,不知道通过什么函数能得到当前行的绝对行数,而sqlite3_total_changes函数只能得更改行的相对行数。

b.       sqlite3_blob_write函数是用于写二进制数据,但这个函数只能用于修改二进制数据,不能用于插入二进制数据,而写数据的时候长度不能超过第一次插入数据时的长度。

  我希望存储的单个二进数据字段可能有几个G的容量,而且随时有可能修改,长度会不断变化,用sqlite3_stmt显然是不行的,而
sqlite3_blob_write函数又不能改变二进数据字段的长度,是我对Sqlite了解的不多,还是这个数据库本身就有这个限制
,希望高手能够指点。

sqlite 二进制字段 (zz)的更多相关文章

  1. C# asp.net 导出数据库二进制字段到excel

    前台的话不多说,本次只详细说下后台导出数据库中的二进制字段,上传下次有时间再说,有比较急的可以留言我 之前在网上搜了关于下载导出二进制字段的资料,发现都不是我想要的,都只是把上传的文件放到服务器然后下 ...

  2. eImage(仅两行代码实现输出从数据库中查询到的二进制字段)标签

    功能: 专门用于向浏览器输出从数据库中查询到的二进制字段.支持通用的几十种文件类型 别名为edoc 使用方法: <chtml><eimage id=书包名type=类型>key ...

  3. Sqlite 修改字段的名称。

    Sqlite 不支持直接修改字段的名称. 我们可以使用别的方法来实现修改字段名. 1.修改原表的名称 ALTER TABLE table RENAME TO tableOld; 2.新建修改字段后的表 ...

  4. SQLite中字段顺序和PAGE_SIZE对性能的影响

    1.背景 SQLite数据库中有1张表,该表含若干个字段,其中有1个字段为BLOB类型,且BLOB字段不是最后1个字段.表结构类似如下(col3为BLOB字段): T (col1 INTEGER,co ...

  5. delphi ftBlob二进制字段读取存储

    aStream:TMemoryStream; 保存到字段 qrypub.ParamByName('Data').LoadFromStream(aStream, ftBlob); 从字段读取到mem里 ...

  6. SQLITE 时间字段操作函数

    SQLite中的时间日期函数 这是我学习SQLite时做的笔记,参考并翻译了Chris Newman写的<SQLite>中的<Working with Dates and Times ...

  7. android:Android中用文件初始化sqlite数据库(zz)

        很多时候在应用安装初始化时,需要创建本地数据库,同时为数据库添加数据,之后再从数据库中读取数据. 这里有2个思路 1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时, ...

  8. Android中查看SQLite中字段数据的两种方式

    方式一:ADB Pull 通过adb pull导出*.db文件到PC的文件夹中,通过可视化工具 SQLiteExpertPers 进行查看.编辑: adb pull /data/data/com.jo ...

  9. 关于SQLite数据库 字段 DateTime 类型

    这两天刚接触SQLite 数据库 还没有太过于深入的了解 , 于是出现了一个问题 : 我在 C#中 ,使用SQLiteHelper 查询SQLite数据库数据时,报了这个错误: System.Form ...

随机推荐

  1. 支持flv的播放神器

    h1:让浏览器支持flv去https://github.com/Bilibili/flv.js h2:让手机电脑都支持mp4使用: <link rel="stylesheet" ...

  2. es6关于let和const的总结

    set用于声明变量 1.var 的一个升级版 2.不存在变量提升 console.log(a);//Uncaught ReferenceError: a is not defined let a=1; ...

  3. mongo connect BI 连接至Power BI

    第一步:安装mongodb服务 官网地址:https://www.mongodb.com/download-center?jmp=nav#community mongodb的安装请参考:http:// ...

  4. IPV4网段划分

    IPV4的地址分类及网络号的范围如下: A类地址 (1)A类地址第1字节为网络地址,其它3个字节为主机地址. (2)A类地址范围:1.0.0.1—126.255.255.254 (3)A类地址中的私有 ...

  5. LD_PRELOAD的妙用,让python支持自己编译的Sqlite

    LD_PRELOAD的妙用,让python支持自己编译的Sqlite LD_PRELOAD=/usr/local/sqlite/lib/libsqlite3.so.0 python3 -c " ...

  6. ubuntu下做柯老师lab19-lab20实验问题总结

    前两篇文章告诉了大家如何将无线封包传输遗失模型和myevalvid添加到ns2.35中,已经成功验证了,这个没有问题.但是本人在做lab19和lab20实验时又发现了一些关于myevalvid工具集的 ...

  7. 2018 icpc 徐州现场赛G-树上差分+组合数学-大佬的代码

    现场赛大佬打印的代码,观摩了一哈. 写了注释,贴一下,好好学习.%%%PKU 代码: //树上差分(LCA) #include<bits/stdc++.h> #define For(i,x ...

  8. CF #502

    #include<cstdio> #include<string> #include<cstdlib> #include<cmath> #include ...

  9. CodeForces 740D Alyona and a tree

    倍增,延迟标记. 考虑一个$u$给他的哪几个祖先$v$贡献了$1$.越往上$dis(v,u)$越大,找到最远的一个还满足条件的$v$,$v$到$u$的父亲这条链上的答案都$+1$.延迟标记一下,然后从 ...

  10. Office 2016系列下载地址

    版本:Office 2016 Pro Plus 64位文件名:SW_DVD5_Office_Professional_Plus_2016_64Bit_ChnSimp_MLF_X20-42426.ISO ...