@@ -92,10 +92,7 @@ BOOL CXStorage_SQLite::XStorage_SQLite_Destory()
9292 return TRUE ;
9393 }
9494 bIsRun = FALSE ;
95- if (NULL != pSTDThread)
96- {
97- pSTDThread->join ();
98- }
95+ pSTDThread->join ();
9996 DataBase_SQLite_Close (xhSQL);
10097 return TRUE ;
10198}
@@ -148,7 +145,7 @@ BOOL CXStorage_SQLite::XStorage_SQLite_FileInsert(XSTORAGECORE_DBFILE* pSt_DBFil
148145 _stprintf_s (tszTableName, _T (" %04d%02d" ), st_LibTimer.wYear , st_LibTimer.wMonth );
149146 }
150147 // 插入语句
151- _stprintf_s (tszSQLStatement, _T (" INSERT INTO `%s` (FilePath,FileName,FileHash,FileUser,FileSize,FileTime) VALUES('%s','%s','%s','%s',%lld,now( ))" ), tszTableName, pSt_DBFile->st_ProtocolFile .tszFilePath , pSt_DBFile->st_ProtocolFile .tszFileName , pSt_DBFile->st_ProtocolFile .tszFileHash , pSt_DBFile->st_ProtocolFile .tszFileUser , pSt_DBFile->st_ProtocolFile .nFileSize );
148+ _stprintf_s (tszSQLStatement, _T (" INSERT INTO `%s` (FilePath,FileName,FileHash,FileUser,FileSize,FileTime) VALUES('%s','%s','%s','%s',%lld,DATETIME('now', 'localtime' ))" ), tszTableName, pSt_DBFile->st_ProtocolFile .tszFilePath , pSt_DBFile->st_ProtocolFile .tszFileName , pSt_DBFile->st_ProtocolFile .tszFileHash , pSt_DBFile->st_ProtocolFile .tszFileUser , pSt_DBFile->st_ProtocolFile .nFileSize );
152149 if (!DataBase_SQLite_Exec (xhSQL, tszSQLStatement))
153150 {
154151 XStorage_IsErrorOccur = TRUE ;
@@ -273,16 +270,16 @@ BOOL CXStorage_SQLite::XStorage_SQLite_FileQuery(XSTORAGECORE_DBFILE*** pppSt_Li
273270 {
274271 if (_tcslen (lpszTimeStart) > 0 && _tcslen (lpszTimeEnd) > 0 )
275272 {
276- _stprintf_s (tszSQLStatement, _T (" SELECT NAME FROM SQLITE_MASTER WHERE TYPE = 'TABLE ' AND NAME BETWEEN '%s' AND '%s'" ), lpszTimeStart, lpszTimeEnd);
273+ _stprintf_s (tszSQLStatement, _T (" SELECT NAME FROM SQLITE_MASTER WHERE TYPE = 'table ' AND NAME BETWEEN '%s' AND '%s'" ), lpszTimeStart, lpszTimeEnd);
277274 }
278275 else
279276 {
280- _stprintf_s (tszSQLStatement, _T (" SELECT NAME FROM SQLITE_MASTER WHERE TYPE = 'TABLE '" ));
277+ _stprintf_s (tszSQLStatement, _T (" SELECT NAME FROM SQLITE_MASTER WHERE TYPE = 'table '" ));
281278 }
282279 }
283280 else
284281 {
285- _stprintf_s (tszSQLStatement, _T (" SELECT NAME FROM SQLITE_MASTER WHERE TYPE = 'TABLE '" ));
282+ _stprintf_s (tszSQLStatement, _T (" SELECT NAME FROM SQLITE_MASTER WHERE TYPE = 'table '" ));
286283 }
287284 if (!DataBase_SQLite_GetTable (xhSQL, tszSQLStatement, &pptszResult, &nLine, &nRow))
288285 {
@@ -294,6 +291,10 @@ BOOL CXStorage_SQLite::XStorage_SQLite_FileQuery(XSTORAGECORE_DBFILE*** pppSt_Li
294291 // 轮训
295292 for (int i = 0 ; i < nLine; i++)
296293 {
294+ if (!XStorage_SQLite_IsNumber (pptszResult[i]))
295+ {
296+ continue ;
297+ }
297298 int nLineResult = 0 ;
298299 int nFieldResult = 0 ;
299300 memset (tszSQLStatement, ' \0 ' , sizeof (tszSQLStatement));
@@ -324,14 +325,14 @@ BOOL CXStorage_SQLite::XStorage_SQLite_FileQuery(XSTORAGECORE_DBFILE*** pppSt_Li
324325 TCHAR** pptszFileResult;
325326 if (DataBase_SQLite_GetTable (xhSQL, tszSQLStatement, &pptszFileResult, &nLineResult, &nFieldResult))
326327 {
327- int nFiled = 0 ;
328+ int nFiled = nFieldResult ;
328329 // 循环获取所有查找到的文件
329330 for (int j = 0 ; j < nLineResult; j++)
330331 {
331332 XSTORAGECORE_DBFILE st_DBFile;
332333 memset (&st_DBFile, ' \0 ' , sizeof (XSTORAGECORE_DBFILE));
333334
334- _tcscpy (st_DBFile.tszTableName , pptszResult[0 ]);
335+ _tcscpy (st_DBFile.tszTableName , pptszResult[i ]);
335336 nFiled++;
336337
337338 _tcscpy (st_DBFile.st_ProtocolFile .tszFilePath , pptszFileResult[nFiled]);
@@ -490,20 +491,18 @@ BOOL CXStorage_SQLite::XStorage_SQLite_CreateTable()
490491 _stprintf_s (tszTableName, _T (" %04d%02d" ), st_DBTime.wYear , st_DBTime.wMonth + i);
491492 }
492493
493- _stprintf_s (tszSQLQuery, _T (" DROP TABLE IF EXISTS `%s`;"
494- " CREATE TABLE `%s` ("
495- " `ID` int NOT NULL AUTO_INCREMENT COMMENT 'ID序号',"
496- " `FilePath` varchar(260) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文件路径',"
497- " `FileName` varchar(260) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文件名称',"
498- " `FileHash` varchar(260) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件HASH',"
499- " `FileUser` varchar(260) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件所属用户',"
500- " `FileUser` varchar(260) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件所属用户',"
501- " `FileSize` bigint NOT NULL COMMENT '文件大小',"
502- " `FileTime` datetime NOT NULL COMMENT '插入时间',"
503- " PRIMARY KEY (`ID`) USING BTREE"
504- " ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;"
505- " SET FOREIGN_KEY_CHECKS = 1;"
506- ), tszTableName, tszTableName);
494+ _stprintf_s (tszSQLQuery, _T (" PRAGMA foreign_keys = false;"
495+ " CREATE TABLE IF NOT EXISTS \" %s\" ("
496+ " \" ID\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
497+ " \" FilePath\" TEXT NOT NULL,"
498+ " \" FileName\" TEXT NOT NULL,"
499+ " \" FileHash\" TEXT,"
500+ " \" FileUser\" TEXT,"
501+ " \" FileSize\" integer NOT NULL,"
502+ " \" FileTime\" TEXT NOT NULL"
503+ " );"
504+ " PRAGMA foreign_keys = true;"
505+ ), tszTableName);
507506
508507 if (!DataBase_SQLite_Exec (xhSQL, tszSQLQuery))
509508 {
@@ -572,12 +571,16 @@ BOOL CXStorage_SQLite::XStorage_SQLite_TimeDel()
572571 TCHAR tszSQLQuery[2048 ];
573572
574573 memset (tszSQLQuery, ' \0 ' , sizeof (tszSQLQuery));
575- _stprintf_s (tszSQLQuery, _T (" SELECT NAME FROM SQLITE_MASTER WHERE TYPE = 'TABLE ' ORDER BY NAME" ));
574+ _stprintf_s (tszSQLQuery, _T (" SELECT NAME FROM SQLITE_MASTER WHERE TYPE = 'table ' ORDER BY NAME" ));
576575 if (DataBase_SQLite_GetTable (xhSQL, tszSQLQuery, &pptszResult, &nLine, &nField))
577576 {
578577 for (int i = 0 ; i < nLine; i++)
579578 {
580579 int nTimeMonth = 0 ;
580+ if (!XStorage_SQLite_IsNumber (pptszResult[i]))
581+ {
582+ continue ;
583+ }
581584 // 只有在处理正确的情况下才进行删除操作
582585 if (XStorage_SQLite_TimeMonth (pptszResult[i], &nTimeMonth))
583586 {
@@ -608,6 +611,18 @@ BOOL CXStorage_SQLite::XStorage_SQLite_TimeDel()
608611 DataBase_SQLite_FreeTable (pptszResult);
609612 return TRUE ;
610613}
614+ BOOL CXStorage_SQLite::XStorage_SQLite_IsNumber (LPCTSTR lpszStr)
615+ {
616+ int nLen = _tcslen (lpszStr);
617+ for (int i = 0 ; i < nLen; i++)
618+ {
619+ if (0 == isdigit (lpszStr[i]))
620+ {
621+ return FALSE ;
622+ }
623+ }
624+ return TRUE ;
625+ }
611626// ////////////////////////////////////////////////////////////////////////
612627// 线程函数
613628// ////////////////////////////////////////////////////////////////////////
0 commit comments