2011-06-23 68 views
1

****請標誌是不必要的,現在的問題不再涉及答案。****初學者問題SQLite的UPDATE語句

我需要幫助的SQLite數據庫改變單一的「細胞」。它是0,它需要是1.(是的,我使用int作爲bools)。我相信問題在於更新。

+ favStmt設置爲零。

+ gameID是主鍵列。

+ useGameID傳入我要更新的行的主鍵。

+ isFavorite是我想要更新的列。

- (void) addFavorite:(NSInteger) useGameID{ 


if(favStmt==nil){ 
    const char *sql = "update GameTable Set isFavorite = ? Where gameID=?"; 
    if(sqlite3_prepare_v2(database, sql, -1, &favStmt, NULL) !=SQLITE_OK) 
     NSAssert1(0,@"Error while creating favorite stmt. '%s'", sqlite3_errmsg(database)); 

} 
sqlite3_bind_int(favStmt, 1, 1); 
sqlite3_bind_int(favStmt, 2, useGameID); 

if (SQLITE_DONE != sqlite3_step(favStmt)) 
    NSAssert1(0, @"Error while favoriting. '%s'", sqlite3_errmsg(database)); 


sqlite3_reset(favStmt); 

}

我發現了一個類似的問題,但我無法弄清楚我的目的。 Changing a value in SQLite3

謝謝你的一切!

對於那些只說受虐狂者使用直接SQLite的人來說,有兩件事。其中一個,是的,我是一個受虐狂。二,我只需要這最後一個聲明,我應該用直接SQLite完成。

+2

不要爲在SQLite中使用布爾值的整數道歉,這是[用於表示布爾值的官方方式](http:// www。 sqlite.org/datatype3.html#boolean)。 –

回答

1

這是一個真正的答案,或者至少是一個更好的答案。

sqlite3_prepare_v2sqlite3_bind_intsqlite3_stepsqlite3_reset序列看起來是正確的,但我認爲你給sqlite3_bind_int錯誤的論點。 sqlite3_bind_int的參數應該是:

  1. 語句句柄。
  2. 索引從1開始的SQL參數的索引。
  3. 要綁定的值。

因此,我認爲你的綁定應該是這樣的:

sqlite3_bind_int(favStmt, 1, 4); 

而且也沒有理由爲偶爾使用低級別的接口要麼道歉,這是很有必要知道發生了什麼事情所有常見的寒暄下方有時。只是不要習慣於用匯編語言來編寫所有東西:)

+0

簡單地添加,不起作用:(是不是在if語句中綁定之後調用sqlite3_step?此外,這段代碼還不知道如何處理useGameID?謝謝! – Jesse

+0

@Jesse:Sorry about all我錯過了你第一次閱讀時的'sqlite3_step'調用,但我現在看到了,但是,我認爲你的綁定參數是錯誤的,所以看看我更新的答案,並讓我知道它是怎麼回事。 –

+0

@mu太短,我不同意,我希望第4列設置爲1,所以我遵循參數序列。你讓我意識到我試圖改變錯誤的列(我忘了它從1開始,而不是0),但是,這個語句必須是我的代碼的錯誤部分 – Jesse