1

I might be doing this all wrong as I am still new to Objective C.

I am trying to retrieve data from an sqlite3 database and store it in a NSObject array.

Here is the viewDidLoad method in my implementation file.

- (void)viewDidLoad
{
    [super viewDidLoad];

    clients = [[NSMutableArray alloc] init];
    [self openDB];
    NSString *sql = [NSString stringWithFormat:@"SELECT * FROM clients"];
    sqlite3_stmt *statement;

    if(sqlite3_prepare_v2(db, [sql 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:field1];

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

            char *field3 = (char *) sqlite3_column_text(statement, 2);
            NSString *field3Str = [[NSString alloc]initWithUTF8String:field3];

            char *field4 = (char *) sqlite3_column_text(statement, 3);
            NSString *field4Str = [[NSString alloc]initWithUTF8String:field4];

            char *field5 = (char *) sqlite3_column_text(statement, 4);
            NSString *field5Str = [[NSString alloc]initWithUTF8String:field5];

            char *field6 = (char *) sqlite3_column_text(statement, 5);
            NSString *field6Str = [[NSString alloc]initWithUTF8String:field6];

            char *field7 = (char *) sqlite3_column_text(statement, 6);
            NSString *field7Str = [[NSString alloc]initWithUTF8String:field7];

            char *field8 = (char *) sqlite3_column_text(statement, 7);
            NSString *field8Str = [[NSString alloc]initWithUTF8String:field8];

            char *field9 = (char *) sqlite3_column_text(statement, 8);
            NSString *field9Str = [[NSString alloc]initWithUTF8String:field9];


            ClientObj *c1 = [[ClientObj alloc] initWithCompanyName:field1Str firstName:field2Str lastName:field3Str email:field4Str workPhone:field5Str mobilePhone:field6Str streetAddress:field7Str city:field8Str postalCode:field9Str];
        }
    }

    self.clients = [NSArray arrayWithObjects:c1,c2,c3,c4, nil];

}

I am trying to increment *c1 each time the while statement loops through the database. eg. c1, c2 ,c3, c4

I am then trying to add each ClientObj created from the database loop above to the clients array but I am not sure how to do this.

Any help or advice is very much appreciated

1
  • 1
    You forgot to call sqlite3_finalize. Commented Nov 9, 2013 at 11:37

1 Answer 1

2

Initialize the array once before the loop:

self.clients = [[NSMutableArray alloc] init];

and then just add each client object to the array inside the loop:

while (sqlite3_step(statement) == SQLITE_ROW) {
    // ...
    ClientObj *c = [[ClientObj alloc] initWithCompanyName:field1Str firstName:field2Str lastName:field3Str email:field4Str workPhone:field5Str mobilePhone:field6Str streetAddress:field7Str city:field8Str postalCode:field9Str];
    [self.clients addObject:c];
}
Sign up to request clarification or add additional context in comments.

2 Comments

OR [self.clients arrayByAddingObject:c];
@KumarKl: But that is less effective because it creates a new array in each step.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.