SQLITE3 读写二进制字段blob
发布时间:2020-12-12 20:37:11 所属栏目:百科 来源:网络整理
导读:看了下SQLITE3的操作类,对于blob的字段存/取操作已经会用了。 但是只能一次性的读取文件长度,然后分配内存。对于分批次写入,我现在还没有弄明白,需要进一步的学习。 写在这里记录一下吧。 CppSQLite3DB db;LPCSTR pstrFileName ="d:test.s3db";try{ db
看了下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没有完全理解,现在只能这么办了,也是没办法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Flex移动skin – 第2部分:处理不同的像素密度
- C语言指针的初始化以及什么是空指针和void指针
- Xcode 4.2:编译错误(Command / Developer /usr/bin/ibtool
- 设计模式6大原则之单一职责原则(Single Responsibility Pr
- ruby-on-rails – Rails:ActiveSupport的未定义方法`prima
- 在C#中更快地调用PowerShell cmdlet
- c# – 为什么我的孩子表单没有在任务栏中显示自定义图标?
- 5.Oracle杂记——数据字典dba_extents
- NAND和NOR flash的区别
- 解析微信返回的xml到map中