¿Cómo obtengo el código de error si sqlite3_prepare_v2 () devuelve uno?

En gran medida siguiendo el tutorial SQLite de Ray Wenderlich , estoy escribiendo una aplicación bastante sencilla que muestra información extraída de un server. La estructura básica de mis consultas SQLite (a la database local, no al server) es la siguiente:

{ 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; } 

Mi pregunta es: ¿cuál es la mejor manera de verificar si hay un error si la statement if devuelve falso? La solución más simple para mí parece almacenar el valor de retorno de sqlite3_prepare_v2() como un int y comprobar que en contra de SQLITE_OK . ¿Qué hay de llamar a sqlite_errmsg() ?

Miré en sqlite_exec() pero no he tenido suerte en conseguir incursiones para comstackr y no me siento suficientemente confiado en mi comprensión de las devoluciones de llamada en C para mantener correctamente el código que los usa. Sin embargo, pasa un argumento para el error, que es lo que me hizo searchlo en primer lugar.

Si desea get un post de error, debe llamar a sqlite3_errmsg .

sqlite3_exec le daría la misma cadena.