在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就可以了
联系客服