query sqlite error out of memory xcode

user3626443 picture user3626443 · May 11, 2014 · Viewed 9.3k times · Source


I have an error. Problem with prepare statement: out of memory. How to fix it? Other queries are working normally. I do not know what can be. Maybe this is a problem -(TelefonDetail *)telefonDetails:(int)iDMob ??

-(TelefonDetail *)telefonDetails:(int)iDMob 
{
 TelefonDetail *retvalTelefon = nil;
 NSString *ZaprosTelefons = @"SELECT iDMob , marka, model,wifi, os,   razmeri,Display,Camera,Stoimos,imageTel,opisCrat FROM MobTele WHERE iDMob=1";
 sqlite3_stmt *statement1;
 if (sqlite3_prepare_v2(_database, [ZaprosTelefons UTF8String], -1, &statement1, nil)
    != SQLITE_OK) {
    NSLog(@"Problem with prepare statement:  %s", sqlite3_errmsg(_database));
 }
 else{   while (sqlite3_step(statement1) == SQLITE_ROW) {
        int iDMob = sqlite3_column_int(statement1, 0);
        char *Marka = (char *) sqlite3_column_text(statement1, 1);
        char *Model = (char *) sqlite3_column_text(statement1, 2);
        char *Wifi = (char *) sqlite3_column_text(statement1, 3);
        char *OS = (char *) sqlite3_column_text(statement1, 4);
        char *Razmeri = (char *) sqlite3_column_text(statement1, 5);
        char *Display = (char *) sqlite3_column_text(statement1, 6);
        char *Camera = (char *) sqlite3_column_text(statement1, 7);
        char *Stoimos = (char *) sqlite3_column_text(statement1, 8);
        Byte *imgTel = (Byte *) sqlite3_column_blob(statement1, 9);
        NSString *marka = [[NSString alloc] initWithUTF8String:Marka];
        NSString *model = [[NSString alloc] initWithUTF8String:Model];
        NSString *wifi = [[NSString alloc] initWithUTF8String:Wifi];
        NSString *os = [[NSString alloc] initWithUTF8String:OS];
        NSString *razmeri = [[NSString alloc] initWithUTF8String:Razmeri];
        NSString *display = [[NSString alloc] initWithUTF8String:Display];
        NSString *camera = [[NSString alloc] initWithUTF8String:Camera];
        NSString *Stoimost = [[NSString alloc] initWithUTF8String:Stoimos];
        int len = sqlite3_column_bytes(statement1, 9);
        NSData *imgData = [[NSData alloc] initWithBytes:imgTel length:len];

    retvalTelefon = [[TelefonDetail alloc]initWhithIDMob:iDMob marka:marka model:model wifi:wifi os:os razmeri:razmeri display:display camera:camera Stoimost:Stoimost imegeTel:imgData];
}
    sqlite3_finalize(statement1);
}
return retvalTelefon;
}

Answer

Rob picture Rob · May 11, 2014

The "out of memory" error is often a misleading error message caused by trying to use a database without having opened it first (or if you accidentally set the sqlite3 database pointer to NULL). For example:

sqlite3 *db = NULL;
sqlite3_stmt *statement;
int rc;

// deliberately did not open database -- ERROR

// now try to use SQLite without opening database

if ((rc = sqlite3_prepare_v2(db, "select * from test", -1, &statement, NULL)) != SQLITE_OK)
    NSLog(@"rc=%d errmsg=%s", rc, sqlite3_errmsg(db));

This will generate a return code (rc) of 21, SQLITE_MISUSE. And the error message is a misleading "out of memory":

2014-05-11 17:36:22.035 MyApp[19942:60b] rc=21 errmsg=out of memory