0

Is it possible to get "Select" query from multiple database in FMDB ?

my program have a lots of database with same schema but different data and name.

user can download these databases and adding them to document folder.

now i want to get query from multiple database and save them inside Nsmutable array.

this how i handle my program with one database :

Utlity.m for accessing my main Program DB :

@implementation Utility

+(NSString *) getDatabasePath
{
     NSString *databasePath = [(AppDelegate *)[[UIApplication sharedApplication] delegate] databasePath];

    return databasePath; 
}

+(void) showAlert:(NSString *)title message:(NSString *)msg
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:msg delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];

    [alert show];
}

Database creation insdide appdelegate :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [NSThread sleepForTimeInterval:2];
    self.databaseName = @"News.db";
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDir = [documentPaths objectAtIndex:0];
    self.databasePath = [documentDir stringByAppendingPathComponent:self.databaseName];
    BOOL createAndCheckTables_result = [self createAndCheckTables];
    NSLog(@"createAndCheckTables is : %s ", createAndCheckTables_result ? "true" : "false");
    return YES;
}
-(void) createAndCheckDatabase
{
    BOOL success;

    NSFileManager *fileManager = [NSFileManager defaultManager];
    success = [fileManager fileExistsAtPath:self.databasePath];

    if(success) return;

    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:self.databaseName];

    [fileManager copyItemAtPath:databasePathFromApp toPath:self.databasePath error:nil];
}

how i call my main DB inside controller :

    self.resultsdict = [[NSMutableArray alloc] init];
   FMDatabase *db = [FMDatabase databaseWithPath:[Utility getDatabasePath]];
    [db open];
    FMResultSet *results_test =  [db executeQuery:@"SELECT * FROM News"];
    while([results_test next])
    {

        [self.resultsdict addObject:[results_test resultDictionary]];
    }


    [db close];

and for one other database (Downloaded) i just change :

NSString * sql = [NSString stringWithFormat:@"SELECT * FROM news order by Id"];
NSString *pathLocal = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"44320.s3db"];
FMDatabase *db = [FMDatabase databaseWithPath:pathLocal];
[db open];
FMResultSet *results_packs =  [db executeQuery:sql];
while([results_packs next])
{

    [self.resultsdict addObject:[results_packs resultDictionary]];
}

i keep the list of downloaded DB name inside my main db "Db_Table" and store the s3db file inside "documentPaths". now i just want pass a list of Database to pathLocal and get result from those database inside my self.resultsdict

Mehdi.Sqalli
  • 510
  • 1
  • 5
  • 22
Ahad Porkar
  • 1,666
  • 2
  • 33
  • 68

0 Answers0