sqlite 二进制字段

sqlite 二进制字段,第1张

概述有时我们用数据库存储文件,需要用到二进制字段,下面列常用方法。    1.写二进制数据      sqlite3 * db;      int result;      char **errmsg =NULL;      result = sqlite3_open("test.db", &db );     if( result != SQLITE_OK ) { return -1;} resul

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


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,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,"Tbl_2","file_content",&sqlite3_blob);

if(rf!= sqlITE_OK)return –1;

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

sqlite3_blob_read(sqlite3_blob,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 二进制字段全部内容,希望文章能够帮你解决sqlite 二进制字段所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1177633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存