2014-05-11 52 views
4


我有一个错误。准备陈述的问题:内存不足。 如何解决它? 其他查询正常工作。我不知道会是什么。 也许这是一个问题-(TelefonDetail *)telefonDetails:(int)iDMob ??查询sqlite错误内存不足xcode

-(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; 
} 
+0

这通常是由于未能完成语句或类似的声明。错误可能很容易在代码的另一部分,但这是你得到“位”的地方。 –

+0

搜索S.O.对于“sqlite内存不足”,你会得到很多点击,例如[为什么我得到一个SQLITE_MISUSE:内存不足错误?](http://stackoverflow.com/questions/15283117/why-do-i-get-a-sqlite-misuse-out-of-memory-error) – Rob

回答

10

的“内存不足”的错误往往是最早打开它引起试图用一个数据库,而不误导性的错误消息(或者,如果你不小心的sqlite3数据库指针设置为NULL)。例如:

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)); 

这将生成的21SQLITE_MISUSE一个返回码(rc)。并且错误信息是一个误导性的“内存不足”:

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

你的回答很有帮助。 – bittu