Sqlite   发布时间:2022-05-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了SQLite数据库如何存储和读取二进制数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

1.存储二进制数据

sqlite提供的绑定二进制参数接口函数为:

int sqlite3_bind_blob(sqlite3_stmt*,int,const void*,int n,voID(*)(void*));

我们希望使用的是一套经过封装的COM接口,将上面这个函数封装为COM接口的形式

BindParaByIndex( LONG index,VARIANT val);

使用VARIANT变量来传递二进制数据,可以使用到它的一个SAFEARRAY指针,它保存了二进制数据的地址和二进制数据的字节长度。

在我们的COM接口中可以这样进行调用原始接口:

sqlite3_bind_blob(m_pStmt,val.parray,val.parray->rsground->cElement,@R_642_5607@TRANSIENT);

构造一个例子测试我们的接口:

BYTEData[] = {0x01,0x02,0x03,0x04,0x05};

CComSafeArray<byte> *pcsfa;

CComSafeArrayBoundbound[1];

bound[0].SetCount(5);

SetLowerBound(0);

pcsfa=newbyte>(bound,1);

for(LONGi= 0;i<(LONG)5;i++)

{

HRESulThr=pcsfa->SetAt(i,Data[i]);

}

_variant_tvariant;

variant.vt=VT_ARRAY|VT_UI1;

parray=@H_39_20@m_psa;

将五个字节的数据封装到VARIANT变量中,然后调用相应的接口,将它们存储到数据库中,然后

调用下面的读取二进制接口,将数据读取出来,看是否读取的数据和存储的数据一致.

2.读取二进制数据

读取二进制参数需要用到下面两个sqlite提供的API:

const void *sqlite3_column_blob(sqlite3_stmt*,int iCol);

int sqlite3_column_bytes(sqlite3_stmt*,int iCol);

访问也通过COM接口来实现:

GetBlobData(LONG index,VARIANT* pval);

如何将原始接口读出来的数据封装到VARIANT结构中去呢,网上这方面的参资料好少,差了不少资料,发现网上有不上SAFEARRAY的实现方案,但是我一一试了一下没有一个可以将二进制数读入SAFEARRAY结构的,Mentor给我推荐了一个CcomSafeArray类,这个类成功实现了数据的存储。

CComVariantcVal;

intnLen=sqlite3_column_bytes(@H_39_20@m_pStmt,2)">nIndeX);

constvoID*pcvData= (constvoID*)sqlite3_column_blob(nIndex);

BYTE*PDAta=newBYTE[nLen];

@H_39_20@memcpy(PDAta,2)">pcvData,2)">nLen);

SetCount(LONG)nLen;PDAta[cVal=@H_39_20@m_psa;

cVal.VT_UI1;

deletePDAta;

cVal.Detach(pVal);

OK,现在可以通过下面的代码来测试是否成功读取了所有的二进制数据。测试代码如下:

_variant_t val;

val = GetBlobData(nIndeX); //nIndex表示BLOB类型数据的索引值

bytebuf[5];

if(val.vt== (VT_UI1|VT_ARRAY))

{

for(index= 0;index< 5;index++)

{

::SafeArrayGetElement(parray,&index,2)">buf+index);

}

}

for(intj= 0;j< 5;j++)

{

cout<<“0x”<<hex<<(int)buf[j]<<endl;//测试结果为0x01,0x05

}


转自http://www.sqlite.com.cn/Mysqlite/6/520.Html

大佬总结

以上是大佬教程为你收集整理的SQLite数据库如何存储和读取二进制数据全部内容,希望文章能够帮你解决SQLite数据库如何存储和读取二进制数据所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: