Skip to main content

iPhone: Sqlite update or insert row



I want to update the quantity if the menuid is already available otherwise add a new row. I used the following code.But no row is added or updated.







sqlite3 *database;

sqlite3_stmt *addStmt=nil;

if (selection== nil) {

selection =@"Medium";

}

if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {



const char *select="select quantity from item where menuid = ?";

sqlite3_stmt *selectstmt;

if(sqlite3_prepare_v2(database, select, -1, &selectstmt, NULL) == SQLITE_OK) {



while(sqlite3_step(selectstmt) == SQLITE_ROW) {

menuID= [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 0)];

char *quant = (char *)sqlite3_column_text(selectstmt,1);

quantity=[NSString stringWithUTF8String:(char *)quant];

// [self.ids addObject:menuID];



}

sqlite3_reset(selectstmt);

}

NSString *quant=[NSString stringWithFormat:@"%@",quantity];





if (quant == @"") {

if (addStmt == nil) {

// const char *sql = "delete from item";

const char *sql = "insert into item(menuid,itemName,price,quantity,spiciness) Values( ?, ?, ?, ?,?)";



if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)

NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));

}

// NSLog(@"ADDSTMT:%@",addStmt);

sqlite3_bind_int(addStmt, 1, [itemId integerValue]);

sqlite3_bind_text(addStmt, 2, [name UTF8String], -1, SQLITE_TRANSIENT);

sqlite3_bind_double(addStmt, 3, [priceItem doubleValue] );

sqlite3_bind_int(addStmt, 4, number);

sqlite3_bind_text(addStmt, 5, [selection UTF8String],-1,SQLITE_TRANSIENT);

NSLog(@"Name:%@",name);

NSLog(@"MENU IDe%@",priceItem);



if(SQLITE_DONE != sqlite3_step(addStmt)){

// NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));

}

else

//SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid



menuID = [NSDecimalNumber numberWithLongLong:sqlite3_last_insert_rowid(database)];



//Reset the add statement.

sqlite3_reset(addStmt);



}





else{

if (addStmt == nil) {

// const char *sql = "delete from item";

const char *sql = "update item set quantity= ? where menuid = ?";



if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)

NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));

}

// NSLog(@"ADDSTMT:%@",addStmt);

sqlite3_bind_int(addStmt, 2, [itemId integerValue]);

number=number+[quant intValue];

sqlite3_bind_int(addStmt, 1, number);



NSLog(@"Name:%@",name);

NSLog(@"MENU IDe%@",priceItem);



if(SQLITE_DONE != sqlite3_step(addStmt)){

// NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));

}

else

//SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid



menuID = [NSDecimalNumber numberWithLongLong:sqlite3_last_insert_rowid(database)];



//Reset the add statement.

sqlite3_reset(addStmt);







sqlite3_close(database);



}

}




Comments

  1. I might be just lacking proper understanding of your code but it doesn't look like you're beginning and then committing a transaction in there. I might be way off base though as I've never inserted a row without using a transaction.

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?

Java Urban Myths

Along the line of C++ Urban Myths and Perl Myths : What are the Java Urban Myths? That is, the ideas and conceptions about Java that are common but have no actual roots in reality . As a Java programmer, what ideas held by your fellow Java programmers have you had to disprove so often that you've come to believe they all learned at the feet of the same drunk old story-teller? Ideally, you would express these myths in a single sentence, and include an explanation of why they are false.