SQLITE3 读写二进制字段blob

看了下SQLITE3的操作类,对于blob的字段存/取操作已经会用了。

但是只能一次性的读取文件长度,然后分配内存。对于分批次写入,我现在还没有弄明白,需要进一步的学习。


写在这里记录一下吧。

CppSQLite3DB db; LPCSTR pstrFileName ="d:\\test.s3db"; try { db.open(pstrFileName); unsigned char* bin ; CppSQLite3Binary blob; HANDLE hFile = CreateFile("c:\\test.bmp",GENERIC_READ,FILE_SHARE_READ,0, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); DWORD dwFileSize=0; dwFileSize =GetFileSize(hFile,&dwFileSize); bin = new unsigned char[dwFileSize];//一次性分配内存 ,好郁闷啊。 //写入数据库 DWORD dwRead = 0 ; DWORD dwSize = dwFileSize; ReadFile(hFile,bin,dwSize,&dwRead,0); blob.setBinary(bin, dwSize); CppSQLite3Buffer bufSQL; bufSQL.format("insert into bindata values ('testing', %Q);", blob.getEncoded()); db.execDML(bufSQL); CloseHandle(hFile); delete bin; //读取blob字段,并创建生成新的文件 hFile = CreateFile("c:\\TEST2.bmp",GENERIC_WRITE,FILE_SHARE_READ,0, OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); CppSQLite3Query q ; q = db.execQuery("select data from bindata where desc = 'testing';"); //读到内存中 if (!q.eof()) { blob.setEncoded((unsigned char*)q.fieldValue("data")); } const unsigned char* pbin = blob.getBinary(); DWORD dwWrite; WriteFile(hFile,pbin,blob.getBinaryLength(),&dwWrite,0);//写入文件 CloseHandle(hFile); } catch(CppSQLite3Exception &e) { m_list.AddString(e.errorMessage()); }

SQLITE3的C语言api没有完全理解,现在只能这么办了,也是没办法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值