В моем приложении для iOS я добавил следующий код, который проверит наличие данных в базе данных.Если да, обновите эту запись, в противном случае вставьте новую запись.
- (void)saveRoomsToDB:(NSArray *)room{
NSString *dbpath = [[self documentDirectoryPath] stringByAppendingFormat:@"/"databaseName];
database = [FMDatabase databaseWithPath:dbpath];
if([database open]){
[database beginTransaction];
for (Room *roomData in room) {
FMResultSet *result = [database executeQuery:@"SELECT RoomDesc FROM Room WHERE QMSRoomId = ?" withArgumentsInArray:@[@(roomData.RoomId)]];
if ([result next]){
[database executeUpdate:@"UPDATE Room SET QMSSubSectionId = ?,RoomDesc = ?,LastEditedDate = ?,RoomType = ?, isTrue = ?, CyclePerformed = ? WHERE QMSRoomId = ?" withArgumentsInArray:@[@(roomData.QMSSubSectionId), roomData.RoomDesc, roomData.LastEditDate, roomData.rt_description, @(roomData.isTrue), @(roomData.CyclePerformed), @(roomData.RoomId)]];
} else{
[database executeUpdate:@"INSERT INTO Room (QMSSubSectionId, QMSRoomId,RoomDesc, LastEditedDate, RoomNumber,RoomType, CyclePerformed,isTrue) VALUES (?, ?, ?, ?, ?, ?, ?, ?);" withArgumentsInArray:@[@(roomData.QMSSubSectionId), @(roomData.RoomId), roomData.RoomDesc, roomData.LastEditDate, roomData.RoomNumber, roomData.rt_description, @(roomData.CyclePerformed), @(roomData.isTrue)]];
}
}
[database commit];
[database close];
}
}
Я распечатал журнал для выполнения вышеуказанного запроса в виде,
2018-05-23 17:47: 49.702 SterileTrakks [656: 74128] нет записей для комнат: 7136
2018-05-23 17: 48: 07.153 SterileTrakks [656: 74128] Вставка для комнат завершена`
МожетЯ оптимизирую это время вставки запроса?Я думаю о применении индексации, но есть ли другой способ?