分享

MFC中利用CppSQLite3将图片等存入sqlite中

 c 资料收集 2014-05-28

   在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就可以了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多