Deepak Khiwani
Deepak Khiwani

Reputation: 744

SQLITE update table issue

I am new to Sqlite and I am working on an application which uses Sqlite.

I have succeeded in creation of table and inserting values into it.

I am trying to update the table but the table is not getting updated.

Below is the code for updating a table:

    -(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;

    }

Please let me know what I am doing wrong.

Thanks

ERROR:

Failed Updated bind result= 21 Problems updating rror: library routine called out of sequence

Upvotes: 0

Views: 310

Answers (1)

CL.
CL.

Reputation: 180020

You have too much commented-out code, and the remaining code is garbled as a result.

Your code tries to bind a parameter, but your current query does not use parameters. Furthermore, the return value of sqlite3_step can never be SQLITE_OK, and you are trying to execute the query twice (and the database complains because you did not call sqlite3_reset).

Use this code:

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;

Upvotes: 1

Related Questions