4


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;
}
2
  • This is usually due to failing to finalize statements or something of that ilk. The error could easily be in another part of the code, but this is where you get "bit". Commented May 11, 2014 at 21:06
  • Search S.O. for "sqlite out of memory" and you'll get numerous hits, e.g. Why do I get a SQLITE_MISUSE : Out of Memory error? Commented May 11, 2014 at 22:09

1 Answer 1

22

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
Sign up to request clarification or add additional context in comments.

2 Comments

your answer helped alot.
Last point "accidentally set the pointer to NULL" was the kicker for me. Good parenthetical.

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.