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?

CCNA 1 Final Exam 2011 latest (hot hot hot)

  Hi! I have been posted content of ccna1 final exam (latest and only question.) I will post the answer and insert image on sunday. If you care, please subscribe your email an become a first person have full test content. Subcribe now  Some question  have not content because this question have images content. So that can you wait for me? SUNDAY 1. A user sees the command prompt: Router(config-if)# . What task can be performed at this mode? Reload the device. Perform basic tests. Configure individual interfaces. Configure individual terminal lines. 2. Refer to the exhibit. Host A attempts to establish a TCP/IP session with host C. During this attempt, a frame was captured with the source MAC address 0050.7320.D632 and the destination MAC address 0030.8517.44C4. The packet inside the captured frame has an IP source address 192.168.7.5, and the destination IP address is 192.168.219.24. At which point in the network was this packet captured? leaving host A leaving ATL leaving...