CHAPTER 11 EXERCISE SOLUTIONS

Answer to Question 1

The sqlite3_exec() function is actually a wrapper for the three functions sqlite3_prepare(); sqlite3_step(); and sqlite3_finalize(). For nonquery SQL statements (such as for creating tables, inserting rows, and so on), it is always better to use the sqlite3_exec() function.

Answer to Question 2

To obtain a C-style string from an NSString object, use the UTF8String method from the NSString class.

Answer to Question 3

-(void) getAllRowsFromTableNamed: (NSString *) tableName {
    //---retrieve rows---
    NSString *qsql = [NSString stringWithFormat:@“SELECT * FROM %@”,
                         tableName];

    sqlite3_stmt *statement;
    if (sqlite3_prepare_v2( db, [qsql UTF8String], −1,
        &statement, nil) == SQLITE_OK) {
        while (sqlite3_step(statement) == SQLITE_ROW) {
            char *field1 = (char *) sqlite3_column_text(statement, 0);
            NSString *field1Str =
                [[NSString alloc] initWithUTF8String: fieldl];

            char *field2 = (char *) sqlite3_column_text(statement, 1);
            NSString *field2Str =
                [[NSString alloc] initWithUTF8String: field2];

            NSString *str = [[NSString alloc] initWithFormat:@“%@ - @“%@ - %@”,
                                 fieldlStr, field2Str];
        NSLog(@“%@”, str);

        [field1Str release];
        [field2Str release];
        [str release];
     }

     //---deletes the compiled statement from memory---
     sqlite3_finalize(statement);
  }
}

Get Beginning iOS 5 Application Development now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.