2011-04-20 159 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) {