123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- //
- // RQQuestionDBManager.m
- // SDJK
- //
- // Created by 张嵘 on 2021/8/20.
- //
- #import "RQQuestionDBManager.h"
- @interface RQQuestionDBManager ()
- //@property (nonatomic, readwrite, strong) FMDatabase *database;
- @property (nonatomic, readwrite, strong) FMDatabaseQueue *databaseQueue;
- @end
- @implementation RQQuestionDBManager
- static id rq_questionDBManager = nil;
- #pragma mark - init
- + (instancetype)sharedInstance {
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- rq_questionDBManager = [[self alloc] init];
- });
- return rq_questionDBManager;
- }
- - (instancetype)init {
- if (self = [super init]) {
- NSError *error;
- NSString *dbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"question20210722.db"]];
- NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"question20210722" ofType:@"db"];
- if ([RQFileManager isPathExist:dbPath]) {
- // self.database = [FMDatabase databaseWithPath:dbPath];
- self.databaseQueue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
- NSLog(@"数据库path-----%@",dbPath);
- // [_database open];
- } else {
- [[RQFileManager fileManager] copyItemAtPath:resourcePath toPath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"question20210722.db"]] error:&error];
- // self.database = [FMDatabase databaseWithPath:dbPath];
- self.databaseQueue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
- NSLog(@"数据库path-----%@",dbPath);
- // [_database open];
- }
- }
- return self;
- }
- #pragma mark - Public Method
- //- (NSArray *)getColumnWithCarType:(RQHomePageCarType)carType subject:(RQHomePageSubjectType)subject pageType:(RQHomeSubPageType)pageType {
- // NSMutableArray *arr = @[].mutableCopy;
- // /// 默认为轿车
- // NSString *queryCarTypeStr = @"lice_car = 1";
- //
- // switch (carType) {
- // case RQHomePageCarType_Car:
- // queryCarTypeStr = @"lice_car = 1";
- // break;
- // case RQHomePageCarType_Bus:
- // queryCarTypeStr = @"lice_bus = 1";
- // break;
- // case RQHomePageCarType_Truck:
- // queryCarTypeStr = @"lice_truck = 1";
- // break;
- // case RQHomePageCarType_Motorcycle:
- // queryCarTypeStr = @"lice_moto = 1";
- // break;
- //
- // default:
- // break;
- // }
- // /// 默认科目一
- // NSString *querySubjectTypeStr = @"subject_1 = 1";
- //
- // switch (subject) {
- // case RQHomePageSubjectType_SubjectOne:
- // querySubjectTypeStr = @"subject_1 = 1";
- // break;
- // case RQHomePageSubjectType_SubjectTwo:
- // querySubjectTypeStr = @"subject_2 = 1";
- // break;
- // case RQHomePageSubjectType_SubjectThree:
- // querySubjectTypeStr = @"subject_3 = 1";
- // break;
- // case RQHomePageSubjectType_SubjectFour:
- // querySubjectTypeStr = @"subject_4 = 1";
- // break;
- //
- // default:
- // break;
- // }
- //
- // /// 默认顺序练习
- // NSString *pageTypeStr = @"seque_issue_name";
- // NSString *pageTypeByOrderStr = @"seque_issue";
- //
- //
- // switch (pageType) {
- // case RQHomeSubPageType_SequentialPractice:
- // pageTypeStr = @"seque_issue_name";
- // pageTypeByOrderStr = @"seque_issue";
- // break;
- // case RQHomeSubPageType_LocalTopics:
- // pageTypeStr = @"place_issue_name";
- // pageTypeByOrderStr = @"place_issue";
- // break;
- // case RQHomeSubPageType_ClassificationExercise:
- // pageTypeStr = @"class_issue_name";
- // pageTypeByOrderStr = @"class_issue";
- // break;
- // case RQHomeSubPageType_SelectedTestQuestions:
- // pageTypeStr = @"excell_issue_name";
- // pageTypeByOrderStr = @"excell_issue";
- // break;
- //
- // default:
- // break;
- // }
- //
- // if ([_database open]) {
- // FMResultSet *resultSet;
- // NSString *queryStr = [NSString stringWithFormat:@"select distinct %@ from question_info where %@ and %@ %@ order by %@ + 0 ASC", pageTypeStr, queryCarTypeStr, querySubjectTypeStr, (pageType == RQHomeSubPageType_LocalTopics)? @"and place_issue != 0" : @"", pageTypeByOrderStr];
- // resultSet = [_database executeQuery:queryStr];
- // while ([resultSet next]) {
- // NSString *str = [resultSet stringForColumn:pageTypeStr];
- // // 对应字段来取数据
- // [arr addObject:str? : @"地方题"];
- // }
- //
- // if ([arr containsObject:@"地方题"] && [arr indexOfObject:@"地方题"] == 0) {
- // NSString *saveStr = arr.firstObject;
- // [arr removeFirstObject];
- // [arr addObject:saveStr];
- // }
- //
- // [_database close];
- // }
- //
- // return arr.copy;
- //}
- //
- //- (NSArray *)getQuestionWithCarType:(RQHomePageCarType)carType subject:(RQHomePageSubjectType)subject pageType:(RQHomeSubPageType)pageType name:(NSString *)name exerciseType:(RQExerciseType)exerciseType {
- // NSMutableArray *arr = @[].mutableCopy;
- // /// 默认为轿车
- // NSString *queryCarTypeStr = @"lice_car = 1";
- //
- // switch (carType) {
- // case RQHomePageCarType_Car:
- // queryCarTypeStr = @"lice_car = 1";
- // break;
- // case RQHomePageCarType_Bus:
- // queryCarTypeStr = @"lice_bus = 1";
- // break;
- // case RQHomePageCarType_Truck:
- // queryCarTypeStr = @"lice_truck = 1";
- // break;
- // case RQHomePageCarType_Motorcycle:
- // queryCarTypeStr = @"lice_moto = 1";
- // break;
- //
- // default:
- // break;
- // }
- // /// 默认科目一
- // NSString *querySubjectTypeStr = @"subject_1 = 1";
- //
- // switch (subject) {
- // case RQHomePageSubjectType_SubjectOne:
- // querySubjectTypeStr = @"subject_1 = 1";
- // break;
- // case RQHomePageSubjectType_SubjectTwo:
- // querySubjectTypeStr = @"subject_2 = 1";
- // break;
- // case RQHomePageSubjectType_SubjectThree:
- // querySubjectTypeStr = @"subject_3 = 1";
- // break;
- // case RQHomePageSubjectType_SubjectFour:
- // querySubjectTypeStr = @"subject_4 = 1";
- // break;
- //
- // default:
- // break;
- // }
- //
- // /// 默认顺序练习
- // NSString *pageTypeStr = @"seque_issue_name";
- // NSString *pageTypeByOrderStr = @"seque_issue";
- // NSString *nameStr = @"";
- //
- // switch (pageType) {
- // case RQHomeSubPageType_SequentialPractice:
- // pageTypeStr = @"seque_issue_name";
- // pageTypeByOrderStr = @"seque_issue";
- // nameStr = [NSString stringWithFormat:@"and seque_issue_name = '%@'",name];
- // break;
- // case RQHomeSubPageType_LocalTopics:
- // pageTypeStr = @"place_issue_name";
- // pageTypeByOrderStr = @"place_issue";
- // nameStr = [NSString stringWithFormat:@"and place_issue_name = '%@'",name];
- // break;
- // case RQHomeSubPageType_ClassificationExercise:
- // pageTypeStr = @"class_issue_name";
- // pageTypeByOrderStr = @"class_issue";
- // nameStr = [NSString stringWithFormat:@"and class_issue_name = '%@'",name];
- // break;
- // case RQHomeSubPageType_SelectedTestQuestions:
- // pageTypeStr = @"excell_issue_name";
- // pageTypeByOrderStr = @"excell_issue";
- // nameStr = [NSString stringWithFormat:@"and excell_issue_name = '%@'",name];
- // break;
- //
- // default:
- // break;
- // }
- // if (RQStringIsEmpty(name)) {
- // nameStr = @"";
- // }
- //
- // /// 默认按_id排序
- // NSString *exerciseTypeStr = @"_id + 0 ASC";
- //
- // switch (exerciseType) {
- // case RQExerciseType_Sequential:
- // exerciseTypeStr = @"_id + 0 ASC";
- // break;
- // case RQExerciseType_Random:
- // exerciseTypeStr = @"random()";
- // break;
- // case RQExerciseType_Recitation:
- // exerciseTypeStr = @"_id + 0 ASC";
- // break;
- // case RQExerciseType_Test:
- // exerciseTypeStr = @"random() limit 50";
- // break;
- // case RQExerciseType_Exam:
- // exerciseTypeStr = @"random() limit 5";
- // break;
- //
- // default:
- // break;
- // }
- //
- // // resultSet = [_db executeQuery:@"select * from question_info where answer like '%-%'"];
- //
- // NSString *queryStr = [NSString stringWithFormat:@"select * from question_info where %@ and %@ %@ order by %@", queryCarTypeStr, querySubjectTypeStr, nameStr, exerciseTypeStr];
- //
- //
- // @weakify(queryStr)
- // if (exerciseType == RQExerciseType_Exam && pageType == RQHomeSubPageType_MockExamination) {
- //
- // RACSignal *signal1 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
- // @strongify(queryStr)
- // queryStr = [NSString stringWithFormat:@"select * from question_info where %@ and %@ %@ %@ order by %@", queryCarTypeStr, querySubjectTypeStr, nameStr, @"and answer like '%√%' or answer like '%×%'", [self getQuestionNumQueryStrWithCarType:carType subject:subject questionType:RQQuestionType_Judgment]];
- // [subscriber sendNext:[self queryQuestionWithQueryStr:queryStr exerciseType:exerciseType]];
- // [subscriber sendCompleted];
- // return [RACDisposable disposableWithBlock:^{
- // }];
- // }];
- //
- // RACSignal *signal2 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
- // @strongify(queryStr)
- // queryStr = [NSString stringWithFormat:@"select * from question_info where %@ and %@ %@ %@ order by %@", queryCarTypeStr, querySubjectTypeStr, nameStr, @"and answer not like '%√%' and answer not like '%×%' and answer not like '%-%'", [self getQuestionNumQueryStrWithCarType:carType subject:subject questionType:RQQuestionType_SingleChoice]];
- // [subscriber sendNext:[self queryQuestionWithQueryStr:queryStr exerciseType:exerciseType]];
- // [subscriber sendCompleted];
- // return [RACDisposable disposableWithBlock:^{
- // }];
- // }];
- // RACSignal *signal3 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
- // @strongify(queryStr)
- // queryStr = [NSString stringWithFormat:@"select * from question_info where %@ and %@ %@ %@ order by %@", queryCarTypeStr, querySubjectTypeStr, nameStr, @"and answer like '%-%' ", [self getQuestionNumQueryStrWithCarType:carType subject:subject questionType:RQQuestionType_MultipleChoice]];
- // [subscriber sendNext:[self queryQuestionWithQueryStr:queryStr exerciseType:exerciseType]];
- // [subscriber sendCompleted];
- // return [RACDisposable disposableWithBlock:^{
- // }];
- // }];
- // RACSignal *signal4 = [RACSignal combineLatest:@[signal1, signal2, signal3] reduce:^id (NSArray *arr1, NSArray *arr2, NSArray *arr3){
- // [arr addObjectsFromArray:arr1];
- // [arr addObjectsFromArray:arr2];
- // [arr addObjectsFromArray:arr3];
- // return arr.copy;
- // }];
- // [signal4 subscribeNext:^(NSArray *allArr) {
- //
- // }];
- // return arr.copy;
- // } else {
- // return [self queryQuestionWithQueryStr:queryStr exerciseType:exerciseType];
- // }
- //}
- //
- //- (RQExerciseModel *)getQuestionWithQuestionId:(NSInteger )questionId {
- // RQExerciseModel *exerciseModel;
- // if ([_database open]) {
- // exerciseModel = [self getQuestionWithDataBase:_database questionId:questionId];
- // [_database close];
- // }
- // return exerciseModel;
- //}
- //
- //- (void)getQuestionsWithQuestionIdArr:(NSArray *)questionIdArr complete:(VoidBlock_id)complete {
- // NSMutableArray *arr = @[].mutableCopy;
- // if (_databaseQueue) {
- // [_databaseQueue inTransaction:^(FMDatabase * _Nonnull db, BOOL * _Nonnull rollback) {
- // @try {
- // [questionIdArr.rac_sequence.signal subscribeNext:^(NSString *questionIdStr) {
- // RQExerciseModel *exerciseModel = [self getQuestionWithDataBase:db questionId:questionIdStr.integerValue];
- // [arr addObject:exerciseModel];
- // } completed:^{
- // if (complete) {
- // complete(arr.copy);
- // }
- // }];
- // } @catch (NSException *exception) {
- // *rollback = YES;
- // } @finally {
- // *rollback = NO;
- // }
- // }];
- // }
- //}
- //
- //
- //#pragma mark - Private Method
- //- (NSArray *)queryQuestionWithQueryStr:(NSString *)queryStr exerciseType:(RQExerciseType)exerciseType {
- // NSMutableArray *arr = @[].mutableCopy;
- // if ([_database open]) {
- // FMResultSet *resultSet;
- // resultSet = [_database executeQuery:queryStr];
- // while ([resultSet next]) {
- // RQExerciseModel *exerciseModel = [RQExerciseModel exerciseModelWithFMResultSet:resultSet];
- // if (exerciseType == RQExerciseType_Recitation) {
- // exerciseModel.userAnswer = exerciseModel.answer;
- // }
- // [arr addObject:exerciseModel];
- // }
- //
- // [_database close];
- // }
- // return arr.copy;
- //}
- //
- //- (NSString *)getQuestionNumQueryStrWithCarType:(RQHomePageCarType)carType subject:(RQHomePageSubjectType)subject questionType:(RQQuestionType)questionType {
- // switch (subject) {
- // case RQHomePageSubjectType_SubjectOne: {
- // switch (questionType) {
- // case RQQuestionType_Judgment: {
- // switch (carType) {
- // case RQHomePageCarType_Car:
- // return @"random() limit 40";
- // case RQHomePageCarType_Bus:
- // return @"random() limit 40";
- // case RQHomePageCarType_Truck:
- // return @"random() limit 40";
- // case RQHomePageCarType_Motorcycle:
- // return @"random() limit 20";
- // default:
- // return @"random() limit 40";
- // }
- // }
- // case RQQuestionType_SingleChoice: {
- // switch (carType) {
- // case RQHomePageCarType_Car:
- // return @"random() limit 60";
- // case RQHomePageCarType_Bus:
- // return @"random() limit 60";
- // case RQHomePageCarType_Truck:
- // return @"random() limit 60";
- // case RQHomePageCarType_Motorcycle:
- // return @"random() limit 30";
- // default:
- // return @"random() limit 60";
- // }
- // }
- // case RQQuestionType_MultipleChoice: {
- // switch (carType) {
- // case RQHomePageCarType_Car:
- // return @"random() limit 0";
- // case RQHomePageCarType_Bus:
- // return @"random() limit 0";
- // case RQHomePageCarType_Truck:
- // return @"random() limit 0";
- // case RQHomePageCarType_Motorcycle:
- // return @"random() limit 0";
- // default:
- // return @"random() limit 0";
- // }
- // }
- // }
- // }
- // case RQHomePageSubjectType_SubjectFour: {
- // switch (questionType) {
- // case RQQuestionType_Judgment: {
- // switch (carType) {
- // case RQHomePageCarType_Car:
- // return @"random() limit 20";
- // case RQHomePageCarType_Bus:
- // return @"random() limit 20";
- // case RQHomePageCarType_Truck:
- // return @"random() limit 20";
- // case RQHomePageCarType_Motorcycle:
- // return @"random() limit 20";
- // default:
- // return @"random() limit 20";
- // }
- // }
- // case RQQuestionType_SingleChoice: {
- // switch (carType) {
- // case RQHomePageCarType_Car:
- // return @"random() limit 20";
- // case RQHomePageCarType_Bus:
- // return @"random() limit 20";
- // case RQHomePageCarType_Truck:
- // return @"random() limit 20";
- // case RQHomePageCarType_Motorcycle:
- // return @"random() limit 20";
- // default:
- // return @"random() limit 20";
- // }
- // }
- // case RQQuestionType_MultipleChoice: {
- // switch (carType) {
- // case RQHomePageCarType_Car:
- // return @"random() limit 10";
- // case RQHomePageCarType_Bus:
- // return @"random() limit 10";
- // case RQHomePageCarType_Truck:
- // return @"random() limit 10";
- // case RQHomePageCarType_Motorcycle:
- // return @"random() limit 10";
- // default:
- // return @"random() limit 10";
- // }
- // }
- // }
- // }
- // default:
- // return @"random() limit 5";
- // }
- //}
- //
- //- (RQExerciseModel *)getQuestionWithDataBase:(FMDatabase *)dataBase questionId:(NSInteger )questionId {
- // RQExerciseModel *exerciseModel;
- // FMResultSet *resultSet;
- // resultSet = [dataBase executeQuery:[NSString stringWithFormat:@"select * from question_info where _id = %ld", questionId]];
- // while ([resultSet next]) {
- // exerciseModel = [RQExerciseModel exerciseModelWithFMResultSet:resultSet];
- // }
- // return exerciseModel;
- //}
- @end
|