Lauren Quantrell Lauren Quantrell - 8 days ago 5
Objective-C Question

Count Number of Rows in a SQLite Database

I'm trying the following code to count the number of rows in my SQLite database table, but it throws an exception. Is these a simpler way to do this?

- (void) countRecords {
int rows = 0;
@try {
NSString *dbPath = [self getDBPath];

if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {

NSString *strSQL;
strSQL = @"SELECT COUNT(*) FROM MYTABLE";
const char *sql = (const char *) [strSQL UTF8String];
sqlite3_stmt *stmt;

if (sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) == SQLITE_OK) {

// THIS IS WHERE IT FAILS:

if (SQLITE_DONE!=sqlite3_step(stmt) ) {

NSAssert1(0,@"Error when counting rows  %s",sqlite3_errmsg(database));

} else {
rows = sqlite3_column_int(stmt, 0);
NSLog(@"SQLite Rows: %i", rows);
}

sqlite3_finalize(stmt);
}

sqlite3_close(database);

}

}

@catch (NSException * e) {
NSLog(@"Error Counting");
}
}

Answer

I came across a solution, using my code above, just replacing the step statement with the code below:

if (sqlite3_step(stmt) == SQLITE_ERROR) {
    NSAssert1(0,@"Error when counting rows  %s",sqlite3_errmsg(database));
} else {
    rows = sqlite3_column_int(stmt, 0);
    NSLog(@"SQLite Rows: %i", rows);
}
Comments