2009-03-28 9 views
10

Je me demande si quelqu'un peut m'aider à comprendre ce qui ne va pas avec ce bloc de code. Je ne passe jamais l'instruction sqlite3_prepare_v2 et le débogueur dit:problème iphone sqlite: "out of memory" sur sqlite3_prepare_v2

'NSInternalInconsistencyException', raison: 'Erreur lors de la création de l'instruction add. 'out of memory' '

static sqlite3 *database = nil; 
sqlite3_stmt *addStmt = nil; 

if(addStmt == nil) { 
    NSLog(@"About to add start time...\n"); 
    const char *sql = "INSERT INTO games_played(start) VALUES(?)";  
    if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK) 
     NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database)); 
    NSLog(@"add statement created successfully!\n"); 
} 
NSLog(@"About to bind start time...\n"); 
sqlite3_bind_text(addStmt, 1, @"start time", -1, SQLITE_TRANSIENT); 

Répondre

26

Je n'ai jamais ouvert la base de données ... Je pense que c'est le problème.

+0

Merci! J'ai eu ce problème aussi :) – hatfinch

+3

évident en rétrospective, mais un message d'erreur TERRIBLE! –

+0

J'ai remarqué que je suis toujours "out of memory" sur toute erreur de syntaxe SQL, c'est peut-être un bug dans sqlite3 avec sqlite3_errmsg? –

11

Ce n'est pas un bug, le problème est que vous n'ouvrez jamais la base de données. Par exemple:

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

Pour être clair, vous devez le faire sqliteStatusCode = sqlite3_open ([databasePath UTF8String], & tracksDB); – loretoparisi

+0

Merci beaucoup! – swiftBoy

0

J'ai également été confronté à ce problème et l'ai résolu en réinitialisant la base de données pour l'instruction sqlite.

Questions connexes