
看了下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,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,OPEN_ALWAYS,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没有完全理解,现在只能这么办了,也是没办法。 总结 以上是内存溢出为你收集整理的SQLITE3 读写二进制字段blob全部内容,希望文章能够帮你解决SQLITE3 读写二进制字段blob所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)