2011-04-20 3 views
0

J'ai ce code, où l'instruction sqlite3_prepare_v2 ne renvoie pas OK ... des idées pourquoi?erreur dans sqlite3_prepare_v2 déclaration

// Setup the SQL Statement and compile it for faster access 
    const char *sqlStatement = "SELECT * FROM CardData"; 
    sqlite3_stmt *compiledStatement; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *saveDirectory = [paths objectAtIndex:0]; 
    NSString *databasePath = [saveDirectory stringByAppendingPathComponent:@"ppcipher.s3db"]; 

// [dm openDatabaseWithPassword:password]; // open the d/b 

    sqlite3 *database; 
    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 
     sqlite3_key(database,password,9); 
     if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 

Répondre

1

Voici quelques possibilités:

  1. Le databasePath est incorrect, et vous créez une nouvelle base de données plutôt que d'ouvrir celui que vous pensez; voir sqlite3_open_v2 et SQLITE_OPEN_READONLY pour détecter ceci

  2. Le schéma ne contient pas de table CardData. Essayez d'imprimer le schéma avec select * from sqlite_master;

  3. Le password est incorrect, et la base de données ne peut pas être déchiffré

0

je crois que le troisième argument dans sqlite3_prepare_v2 est

« Longueur maximale de zSql en octets "

et vous avez -1 ensemble là. Peut-être essayer de le mettre à

if(sqlite3_prepare_v2(database, sqlStatement, strlen(sqlStatement), &compiledStatement, NULL) == SQLITE_OK) {