2014-05-16 72 views
-1

我已經能夠使用相同的代碼結構刪除和重新加載表,但遇到此表的問題。基本上我的代碼打算做的是讓用戶刪除他們的自定義選擇並恢復默認值。對於爲什麼我無法放下桌子的任何見解表示讚賞。刪除表sqlite問題

編輯:問題是,要刪除的初始表不存在。我最終使用sqlite3_errmsg來解決這個問題。

- (void) dropReloadFoodlistTable{ 
const char *dbpath = [_databasePath UTF8String]; 
sqlite3_stmt *statement; 

if (sqlite3_open(dbpath, &_profileDB) == SQLITE_OK) 
{ 
    NSString *querySQL = @"DROP TABLE FOODLIST"; 

    const char *query_stmt = [querySQL UTF8String]; 

    if (sqlite3_prepare_v2(_profileDB, 
          query_stmt, -1, &statement, NULL) == SQLITE_OK) 
    { 
     if (sqlite3_step(statement) == SQLITE_ROW) 
     { 
      NSLog(@"SQL Statement complete"); 
     } 
     sqlite3_finalize(statement); 
    } 

    char *errMsg2; 
    const char *sql_stmt2 = 
    "CREATE TABLE IF NOT EXISTS FOODLIST (ID INTEGER PRIMARY KEY AUTOINCREMENT, CARB STRING, PROTEIN STRING, FAT STRING, FRUIT STRING, VEG STRING)"; 

    if (sqlite3_exec(_profileDB, sql_stmt2, NULL, NULL, &errMsg2) != SQLITE_OK) 
    { 
     NSLog(@"Failed to create FOODLIST table"); 
    } 


    sqlite3_close(_profileDB); 
} 


[self initialDataLoadFoodList]; 

} 
+1

代碼失敗在哪裏?使用'sqlite3_errmsg'來找出錯誤。 – rmaddy

+1

如果你真的執行了'DROP'語句,它也會有所幫助。你所做的就是準備一份聲明,然後確定它。 – rmaddy

+0

-1。無法描述錯誤,未能使用sqlite3_errmsg。 –

回答

0

此代碼不執行DROP TABLE聲明。

要執行準備好的語句,您必須致電sqlite3_step

0

您準備好聲明,但從未使用sqlite3_step()實際執行聲明。

reference

+0

我編輯了代碼,但問題是它沒有超過準備實際運行步驟 – user3406093

+0

「DROP」語句需要與'sqlite3_exec'一起運行,就像您的'CREATE'語句一樣。 – rmaddy

+0

問題在於,不存在用於刪除的初始表。我最終使用sqlite3_errmsg來解決這個問題。 – user3406093