Consider using a transaction and a prepared sqlite statement.
NSString* query;
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK)
{
    query = @"BEGIN TRANSACTION";
    ret = sqlite3_exec(database, [query UTF8String], NULL, NULL, NULL);
    sqlite3_stmt *compiledStatement;
    NSString* str = @"INSERT INTO MYTAB (NAME, ADD) values (?,?)";
    sqlite3_prepare_v2(database, [str UTF8String], -1, &compiledStatement, NULL);
    for (int i=0; i<50; i++)
    {
        const char *name = "name";
        const char *add = "add";
        sqlite3_bind_text(compiledStatement, 1, name, -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(compiledStatement, 2, add, -1, SQLITE_TRANSIENT);
        ret = sqlite3_step(compiledStatement);
        ret = sqlite3_reset(compiledStatement);
    }
    sqlite3_finalize(compiledStatement);
    query = @"COMMIT TRANSACTION";
    ret = sqlite3_exec(database, [query UTF8String], NULL, NULL, NULL);
    sqlite3_close(database);
}