2011-04-20 69 views
0

我有这段代码,其中sqlite3_prepare_v2语句没有返回OK ......任何想法为什么?sqlite3_prepare_v2语句错误

// 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) { 

回答

1

这里有一些可能性:

  1. databasePath是不正确的,要创建一个新的数据库,而不是打开你认为一个;请参阅sqlite3_open_v2SQLITE_OPEN_READONLY以检测此

  2. 该模式不包含CardData表。尝试打印出来的架构与select * from sqlite_master;

  3. password是不正确的,数据库无法解密

0

我相信sqlite3_prepare_v2第三个参数是ZSQL的

“最大长度字节“

并且你在那里设置-1。也许尝试将其设置为

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