Use and Access Existing SQLite Database on iOS

后端 未结 5 2084
青春惊慌失措
青春惊慌失措 2020-11-27 14:23

I have a fully populated database in SQLite that I\'d like to use in my new app. It\'s rather large, so I\'d like to avoid changing it to another format if possible. How can

5条回答
  •  情书的邮戳
    2020-11-27 15:09

    To copy .sqlite file in directory...

    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    // Database filename can have extension db/sqlite.
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *databasePath = [documentsDirectory stringByAppendingPathComponent:@"MapView.sqlite"];
    
    success = [fileManager fileExistsAtPath:databasePath];
    //    if (success){
    //        return;
    //    }
    // The writable database does not exist, so copy the default to the appropriate location.
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MapView.sqlite"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:databasePath error:&error];
    if (!success) {
        //NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }
    else
    {
        NSLog(@"Database created successfully");
    }
    

    To select Data From Database...

    const char *dbpath = [databasePath UTF8String];
    sqlite3_stmt    *statement;
    
    if (sqlite3_open(dbpath, &mapDB) == SQLITE_OK)
    {
        NSString *querySQL = [NSString stringWithFormat: @"SELECT * FROM maplatlong"];
    
        const char *query_stmt = [querySQL UTF8String];
    
        if (sqlite3_prepare_v2(mapDB, query_stmt, -1, &statement, NULL) == SQLITE_OK)
        {
            while(sqlite3_step(statement) == SQLITE_ROW)
            {
                NSString *cityN = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
                NSString *lat = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)];
                NSString *longi = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)];
    
                [cityName addObject:cityN];
                [latitude addObject:lat];
                [longitude addObject:longi];
    
            }
            sqlite3_finalize(statement);
    
                    }
        sqlite3_close(mapDB);
    
    }
    

提交回复
热议问题