2011-06-23 9 views
1

****してくださいフラグとして不要な-質問はもはや答えにも関する。****初級問題

私はSQLiteデータベースにシングル「セル」に変更することを支援する必要があります。それは0です、それは1である必要があります(はい、私はboolとしてintsを使用しています)。私はこの問題がアップデートにあると信じています。

+ favStmtは、より早くnilに設定されます。

+ 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を使っていると言う人にとって、2つのことがあります。 1つ、はい、私はマゾイストです。 2つ目は、この最後のステートメントだけが必要なので、私は直接SQLiteで行うべきです。

+2

[ブール値を表す正式な方法](http://www.windowsfiles.jp/fairnetsys)をSQLiteでブール値に使用することをお詫びしてはいけません。 sqlite.org/datatype3.html#boolean)。 –

答えて

1

ここには本当の答え、または少なくともより良いものがあります。

あなたsqlite3_prepare_v2sqlite3_bind_intは、sqlite3_stepは、sqlite3_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:あなたの 'sqlite3_step'コールは私の最初の読書では見逃しましたが、今見ていますが、あなたのバインドパラメータが間違っていると思いますので、私の更新された答えを見て、どうすればいいか教えてください。 –

+0

@muが短すぎます私は4番目の列を1に設定したいので、引数のシーケンスに従っています。間違った列を変更しようとしていたことを実感できました(0ではなく1から始まることを忘れていました)。 – Jesse