iPhone: обновление Sqlite или вставка строки - PullRequest
0 голосов
/ 27 февраля 2012

Я хочу обновить количество, если идентификатор меню уже доступен, иначе добавьте новую строку.Я использовал следующий код. Но ни одна строка не была добавлена ​​или обновлена.

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

}
}

Ответы [ 2 ]

0 голосов
/ 27 февраля 2012

Я нашел это сам: Изменен оператор выбора на:

NSString *sqlStmt=[NSString stringWithFormat:@"select quantity from item where menuid = %@ and spiciness = '%@'",itemId,selection];

Также изменил условие if оператора вставки на

if ([quanty isEqualToString:@"(null)"]) 
0 голосов
/ 27 февраля 2012

Возможно, мне просто не хватает правильного понимания вашего кода, но не похоже, что вы начинаете, а затем совершаете там транзакцию.Я мог бы быть далеко от базы, хотя, поскольку я никогда не вставлял строку без использования транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...