在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=db.compileStatement("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=db.compileStatement("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|CFile::shareDenyNone|CFile::modeNoTruncate|CFile::modeCreate)) { file.Write((BYTE *)imgs,len); file.Close(); } rs.nextRow(); } rs.finalize(); stat.finalize();
这样我们就可以将文件保存到sqlite数据库中了,只要将sqlite要保存文件的字段类型设置为blob就可以了
|