SQLITE更新表问题

时间:2014-03-23 05:52:07

标签: ios sqlite

我是Sqlite的新手,我正在使用一个使用Sqlite的应用程序。

我成功创建了表并在其中插入了值。

我正在尝试更新表格,但表格没有更新。

以下是更新表格的代码:

    -(BOOL)updateData:(NSString *)screenName status:(NSString *)currentStatus{

    const char *dbPath = [databasePath UTF8String];

    if (sqlite3_open (dbPath, &database) == SQLITE_OK) {

        NSString *updateSQL = [NSString stringWithFormat:@"Update productDetail Set status = \"%@\" where current_screen = \"%@\"",currentStatus,screenName];

//        const char *update_stmt = "update productDetail Set status = ? Where screenName=?";

        const char *update_stmt = [updateSQL UTF8String];

        /*
        if (sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL)) {

            sqlite3_bind_text(statement, 0, [currentStatus UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(statement, 2, [screenName UTF8String], -1, SQLITE_TRANSIENT);
        }
         */


        /*
        char* errmsg;
        sqlite3_exec(database, "COMMIT", NULL, NULL, &errmsg);
        */

        sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL);

        /*
        sqlite3_bind_text(statement, 1, [currentStatus UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(statement, 3, [screenName UTF8String], -1, SQLITE_TRANSIENT);
        */

        if (sqlite3_step(statement) == SQLITE_OK) {
            NSLog(@"Updated Successfully!!");
            return YES;
        }
        else{

            NSLog(@"error: %s",sqlite3_errmsg(database));
            NSLog(@"Failed Updated");
        }

        int result=sqlite3_bind_text(statement, 1, Nil , -1, SQLITE_TRANSIENT);
        NSLog(@"bind result= %i", result);

        if(sqlite3_step(statement) != SQLITE_DONE) {
            NSLog(@"Problems updating");
            NSLog(@"error: %s",sqlite3_errmsg(database));
            return NO;
        }
        else{
            NSLog(@"Updated");
        }
        sqlite3_finalize(statement);
    }
    return YES;

    }

请让我知道我做错了什么。

由于

错误:

更新失败 bind result = 21 更新问题 rror:库程序不按顺序调用

1 个答案:

答案 0 :(得分:1)

您有太多注释掉的代码,其余代码因此而出现乱码。

您的代码尝试绑定参数,但您当前的查询不使用参数。 此外,sqlite3_step的返回值永远不会是SQLITE_OK,并且您尝试执行两次查询(并且数据库因为您没有调用sqlite3_reset而抱怨)。

使用此代码:

result = NO;
const char *update_stmt = "UPDATE productDetail SET status=? WHERE screenName=?";
if (sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL) != SQLITE_OK) {
    NSLog(@"prepare error: %s", sqlite3_errmsg(database));
} else {
    sqlite3_bind_text(statement, 1, [currentStatus UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(statement, 2, [screenName UTF8String], -1, SQLITE_TRANSIENT);
    if (sqlite3_step(statement) != SQLITE_DONE)
        NSLog(@"execution error: %s", sqlite3_errmsg(database));
    else
        result = YES;
    sqlite3_finalize(statement);
}
return result;