加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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没有完全理解,现在只能这么办了,也是没办法。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读