2013-02-14 8 views
7

In gran parte seguendo Ray Wenderlich's SQLite tutorial, sto scrivendo un'app abbastanza semplice che visualizza le informazioni tirate giù da un server. La struttura di base di mie domande SQLite (al database locale, non il server) è il seguente:Come posso prelevare il codice di errore se sqlite3_prepare_v2() ne restituisce uno?

{ 
    NSMutableArray *list = [[NSMutableArray alloc] init]; 
    NSString *query = @"SELECT _id, type FROM table ORDER BY type"; // As appropriate. 
    sqlite3_stmt *statement; 

    if (sqlite3_prepare_v2(_db, [query UTF8String], -1, &statement, nil) == SQLITE_OK) { 
     while (sqlite3_step(statement) == SQLITE_ROW) { 
      // Process the returned values... 
      int rowNumber = sqlite3_column_int(statement, 0); 

      // Initialize the object. 
      // Push the object onto the array. 
     } 
     sqlite3_finalize(statement); 
    } else { 
     // Log the error. 
    } 
    return list; 
} 

La mia domanda è, qual è il modo migliore per verificare la presenza di un errore se l'istruzione if restituisce false? La soluzione più semplice per me sembra memorizzare il valore restituito di sqlite3_prepare_v2() come int e controllare che rispetto a SQLITE_OK. Che ne dite di chiamare sqlite_errmsg()?

Ho dato un'occhiata a sqlite_exec() ma non ho avuto fortuna nell'ottenere le incursioni da compilare e non mi sento abbastanza sicuro nella mia comprensione dei callback in C per mantenere correttamente il codice che li utilizza. Passa comunque un argomento per l'errore, che è quello che mi ha fatto guardare in primo luogo.

risposta

3

Se si desidera ottenere un messaggio di errore, è necessario infatti chiamare sqlite3_errmsg.

sqlite3_exec fornirebbe la stessa stringa.

+1

Quindi sembra che il blocco 'else' possa contenere semplicemente' NSLog (@ "Database restituito errore% d:% s", sqlite3_errcode (_db), sqlite3_errmsg (_db)); ' – ele

+0

Sì; anche se il codice di errore non è molto utile se hai anche il messaggio (le informazioni nel codice sono un sottoinsieme delle informazioni nel messaggio). –

+0

Grazie. Non avevo ancora avuto la possibilità di provarlo. – ele

Problemi correlati