4

コードに問題が見つからないため、タイトルは私が持っているほとんどすべての情報です。以下のコードで使用されているデータベースの同じインスタンスは、正常に挿入、削除、および選択できますが、この関数は機能しません。エラーコードは返されません(常に0)。この関数を実行した後も、プログラムは正常に実行され続けます。

テーブル情報は次のとおりです。

reminder (uniqueID integer primary key autoincrement, title text not null, details text, time integer)

問題のコード:

- (void) updateEntryData:(ReminderData *)data
{
    sqlite3_stmt *statement; 
    char *updateCommand = "UPDATE reminder SET title = '?', details = '?', time = ?    WHERE uniqueID = ?";

    int e = sqlite3_prepare_v2(database, updateCommand, -1, &statement, nil);
    if(e != SQLITE_OK) {
        NSLog(@"Problem with updateEntryWithUniqueID");
        NSLog(@"Error Code: %d, message '%s'", e, sqlite3_errmsg(database));
        return;
    }

    sqlite3_bind_text(statement, 1, [data.title UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(statement, 2, [data.details UTF8String], -1, SQLITE_TRANSIENT); 
    sqlite3_bind_int(statement, 3, [data.time timeIntervalSince1970]);
    sqlite3_bind_int(statement, 4, data.uniqueID);
    NSLog(@"\nID: %d\nTitle: %@\nDetails: %@\nTime: %@", data.uniqueID, data.title, data.details, data.time);

    if(sqlite3_step(statement) != SQLITE_DONE) {
        NSLog(@"Problems updating entry in reminder");
    }

    /* Finished */ 
    sqlite3_finalize(statement);
}

どんな助けでも大歓迎です。私は困惑しています。

編集:使用されたsqlコマンドがsqliteコンソールに入力されたときに機能することを言及するのを忘れました。

4

1 に答える 1

5

パラメータを囲む一重引用符を削除するだけです。プレースホルダーをラップすると、パラメーターではなく値になります。

char *updateCommand = "UPDATE reminder SET title = ?, details = ? .....";
于 2012-12-30T05:14:49.163 に答える