Sqlite3数据块以BLOB字段存储二进制数据块

来源:互联网 发布:a卡游戏优化 编辑:程序博客网 时间:2024/04/29 19:58
int CppSQLite3DB::execDMLBlob(const char* szSQL,const char* blob1,const char* blob2,const char* blob3,const char* blob4,int length){checkDB();char* szError=0;const char *error;sqlite3_stmt      *stmt = 0;int nRet = sqlite3_prepare(mpDB, szSQL,strlen(szSQL), &stmt, &error);if (nRet != SQLITE_OK){//获取SQLITE错误}//SQL语句中的下面四个参数绑定到数据块中intindex;index = sqlite3_bind_parameter_index(stmt, ":aaa");nRet = sqlite3_bind_blob(stmt, index, blob1, length, NULL);index = sqlite3_bind_parameter_index(stmt, ":bbb");nRet = sqlite3_bind_blob(stmt, index, blob2, length, NULL);index = sqlite3_bind_parameter_index(stmt, ":ccc");nRet = sqlite3_bind_blob(stmt, index, blob3, length, NULL);index = sqlite3_bind_parameter_index(stmt, ":ddd");nRet = sqlite3_bind_blob(stmt, index, blob4, length, NULL);if (nRet != SQLITE_OK){//获取SQLITE错误,打印出来}//执行SQL语句nRet = sqlite3_step(stmt);if (nRet != SQLITE_DONE){//获取SQLITE错误,打印出来}sqlite3_finalize(stmt); return SQLITE_OK;}


MTK::CMTKSqliteEXsqliteDBInsert;//自己封装后的sqlite3类sqliteDBInsert.open(filePathDB);char szCommand[MAX_BUF_LEN] = {0};memset(szCommand, 0, MAX_BUF_LEN);sprintf(szCommand, "insert into T_RIM_RTM_SAMPLE_DATA values (?1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12,?13,?14,?15,?16,?17,?18,?19,?20)");sqliteDBInsert.prepare_v2(szCommand);//当游标移动到文件尾时说明解析完毕while(m_curPosition != m_totalByte){//解析一次m_curPosition往后移动一次//解析内存数据,每次解析1000条数据AnalyzeBinData(curFilePahtName);//开启事务sqliteDBInsert.execDML("begin transaction;");//解析一次存一次vector<DataAcquisiton>::iterator iter;for(iter=m_vecCurShowData.begin();iter!=m_vecCurShowData.end();iter++){DataAcquisitontempdataAcq;tempdataAcq = *iter;sqliteDBInsert.bind(1, (__int64)tempdataAcq.head);sqliteDBInsert.bind(2, (int)tempdataAcq.moniStation);sqliteDBInsert.bind(3, (int)tempdataAcq.devParamSetAndAnt);sqliteDBInsert.bind(4, (int)tempdataAcq.moniTimeYear);sqliteDBInsert.bind(5, (int)tempdataAcq.moniTimeMouth);sqliteDBInsert.bind(6, (int)tempdataAcq.moniTimeDay);sqliteDBInsert.bind(7, (int)tempdataAcq.starMoniTimeHour);sqliteDBInsert.bind(8, (int)tempdataAcq.starMoniTimeMinu);sqliteDBInsert.bind(9, (int)tempdataAcq.starMoniTimeSeco);sqliteDBInsert.bind(10,(int)tempdataAcq.starMoniTimeMilli);sqliteDBInsert.bind(11,tempdataAcq.longitude);sqliteDBInsert.bind(12,tempdataAcq.latitude);sqliteDBInsert.bind(13,(DOUBLE)tempdataAcq.altitude);sqliteDBInsert.bind(14,(__int64)tempdataAcq.startFrequency);sqliteDBInsert.bind(15,(int)tempdataAcq.step);sqliteDBInsert.bind(16,(int)tempdataAcq.frePointNum);int totallength = tempdataAcq.frePointNum * 2;sqliteDBInsert.bind(18,(const UCHAR*)tempdataAcq.pField,totallength);//bin存储的为场强值sqliteDBInsert.bind(17,(const UCHAR*)tempdataAcq.pdata,totallength);sqliteDBInsert.bind(19,(const UCHAR*)tempdataAcq.pGate,totallength);sqliteDBInsert.bind(20,(const UCHAR*)tempdataAcq.pOcc,totallength);if (SQLITE_DONE != (sqliteDBInsert.step())) break;if (SQLITE_OK != (sqliteDBInsert.reset())) break;}//提交事务sqliteDBInsert.execDML("commit transaction;");//释放内存vector<DataAcquisiton>::iterator iterFree;for(iterFree=m_vecCurShowData.begin();iterFree!=m_vecCurShowData.end();iterFree++){DataAcquisitontempdataAcqFre;tempdataAcqFre = *iterFree;delete [] tempdataAcqFre.pdata;tempdataAcqFre.pdata = NULL;delete [] tempdataAcqFre.pField;tempdataAcqFre.pField = NULL;delete [] tempdataAcqFre.pGate;tempdataAcqFre.pGate = NULL;delete [] tempdataAcqFre.pOcc;tempdataAcqFre.pOcc = NULL;}if (m_curPosition<=m_totalByte){float posTemp = (float)m_curPosition/m_totalByte;int pos = (int)(posTemp*100);//CString str;//str.Format("%d%%",pos);//m_listCtrl.SetItemText(index,2,str);::PostMessage(m_pParent->m_hWnd, UPDATAUI, (WPARAM)m_index, (LPARAM)pos);//m_progressCtr.SetPos(pos);}}//结束sqliteDBInsert.finalPrepare();sqliteDBInsert.close();


0 0
原创粉丝点击