MFC中利用CppSQLite3将图片等存入sqlite中
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MFC中利用CppSQLite3将图片等存入sqlite中
在MFC中要将图片的二进制数据存数到sqlite中。
我们可以利用CppSQLite3DB和CppSQLite3Statement
首先我们利用CFile将文件读入到内存中
CFile file;
if(file.Open("C:\\1.jpg",CFile::modeRead | CFile::typeBinary)) {
ULONG fileSize=file.GetLength();//得到文件大小
BYTE * fileByte=new BYTE[fileSize];//按照文件大小在堆上分配内存空间
if(file.Read(fileByte,fileSize)>0)//把文件放到fileByte中
{
CppSQLite3DB db;
CppSQLite3Statement stat;
db.open("Test.tst");
stat=pileStatement("insert into ConText(ID,ImageFile,SoundFile) values(NULL,?,?)");
stat.bind(1,(const unsigned char *)fileBype,fileSize);
stat.bind(2,(const unsigned char *)fileBype,fileSize);
stat.execDML();
stat.finalize();//释放分配的stat空间
db.close();
}
delete [] fileBype;
file.Close();
}
这样我们就将一个图片保存得到sqlite中了,同样我们可以将sqlite中的而二进制数据读出来保存为图片
如下
CppSQLite3DB db;
db.open("Test.tst");
CppSQLite3Statement stat;
stat=pileStatement("select * from ConText where ID=1");
CppSQLite3Query rs=stat.execQuery();
while(!rs.eof())
{
int len;
const unsigned char * imgs=rs.getBlobField(1,len);
CFile file;
if(file.Open("C:\\2.jpg",CFile::typeBinary|CFile::modeWrite|CF ile::shareDenyNone|CFile::modeNoTruncate|CFile::modeCreate)) {
file.Write((BYTE *)imgs,len);
file.Close();
}
rs.nextRow();
}
rs.finalize();
stat.finalize();
这样我们就可以将文件保存到sqlite数据库中了,只要将sqlite要保存文件的字段类型设置为blob就可以了。