VC操作sqlite3数据库插入blob字段(记录)

来源:互联网 发布:unity3d 碰撞检测 编辑:程序博客网 时间:2024/06/05 14:10
int CVCFaceCaptureClientDlg::writeFile(SnapInfo & structSnap, char * szImagePath, int bufLen,int cols, int rows, char * fdsa, CertInfo & structCert, char * tmpBuf1, int n, int m, char * tmpBuf2) {char *strImagePath = new char[bufLen];memset(strImagePath,0,sizeof(strImagePath));strImagePath = szImagePath;char* szSQL = new char[500];//sql语句存储空间设置为默认的256个长度int nResule;//格式化sql语句sprintf(szSQL, "insert into ExceptionDataTable values(%d,%d,'%s',%d,%d,%d,?,?,%d,'%s','%s',%d,'%s','%s','%s','%s',?,%d,%d,?)",structSnap.m_nDevId,structSnap.m_nDevChannelIndex,structSnap.m_sSnapTime.c_str(),structSnap.m_nFaceScore,cols,rows,structCert.m_nCertType,structCert.m_sCertNumber.c_str(),structCert.m_sCertName.c_str(),structCert.m_nCertSex,structCert.m_sCertBirthPlace.c_str(),structCert.m_sCertAddress.c_str(),structCert.m_sCertAuthority.c_str(),structCert.m_sCertExparitionDate.c_str(),n,m);nResule = sqlite3_prepare(m_db,szSQL,-1,&stmt,NULL);    //cout << "nResult" << nResule << endl;if(nResule != SQLITE_OK){AfxMessageBox(L"保存数据失败");return -1;}FILE* fpRead = NULL;long fileSize;//图片文件大小char *szImageData;fpRead = fopen(strImagePath,"rb");if(fpRead!=NULL){//计算文件大小fseek(fpRead,0,SEEK_END);fileSize = ftell(fpRead);fseek(fpRead,0,SEEK_SET);}//读取文件内容szImageData = new char[fileSize+1];size_t sz = fread(szImageData,sizeof(char),fileSize+1,fpRead);fclose(fpRead);sqlite3_bind_blob(stmt,1,szImageData,fileSize,NULL);sqlite3_bind_blob(stmt,2,szImageData,fileSize,NULL);sqlite3_bind_blob(stmt,3,szImageData,fileSize,NULL);sqlite3_bind_blob(stmt,4,szImageData,fileSize,NULL);nResule = sqlite3_step(stmt);//cout << "nResult" << nResule << endl;if(nResule != SQLITE_DONE){cout<<"保存数据失败"<<endl;}if(strImagePath){delete []strImagePath;strImagePath = NULL;}if(szImageData){delete []szImageData;szImageData = NULL;}if(!stmt)sqlite3_finalize(stmt);return 0;}
主要是为了记录使用占位符。。。
0 0