2015-05-09 4 views
1

Я хочу, чтобы выполнить запрос вставки запрос работает нормально, когда мы называем это InsUpdateDelData его возвращение ложным, то данные не вставлялиКак добавить данные в базу данных с помощью SQLite Manager

- (IBAction)addToCart:(id)sender { 

    AppDelegate *obj = (AppDelegate *)[[UIApplication sharedApplication]delegate] ; 
    NSString *insert = @"[email protected]" ; 


    NSString *insertSQL = [NSString stringWithFormat: 
    @"INSERT INTO cart_user(user_id,product_price,product_type,categories_type,product_images,description) values('%@','%@','%@','%@','%@','%@')",insert,handBegsImages.product_price,handBegsImages.product_tagline,handbegCategoriess.handbegid,handBegsImages.main_image,handBegsImages.product_description]; 
    BOOL abc = [obj InsUpdateDelData:insertSQL]; 
    NSLog(@"print the value of abc %@=", abc) ; 
    if (abc == TRUE) { 
     NSLog(@"@ Data was Inserted"); 
    } 
    else{ 
      [Utility showAlertView:@"Plz try again message" message:@"Again" viewcontroller:self]; 
    } 
    } 


-(BOOL)InsUpdateDelData:(NSString*)SqlStr 
{ 
    if([SqlStr isEqual:@""]) 
     return NO; 

    BOOL RetrunValue; 
    RetrunValue = NO; 
    const char *sql = [SqlStr cStringUsingEncoding:NSUTF8StringEncoding]; 
    sqlite3_stmt *stmt; 
    if (sqlite3_prepare_v2(database, sql, -1, &stmt, nil) == SQLITE_OK) 
     RetrunValue = YES; 

    if(RetrunValue == YES) 
    { 
     if(sqlite3_step(stmt) != SQLITE_DONE) { 

     } 
     sqlite3_finalize(stmt); 
    } 
    return RetrunValue; 
} 
+0

отчет не является ошибкой –

+0

NSLog (@ "напечатает значение sqlite3 % s = ", sqlite3_errmsg (база данных)); моя проблема была решена для этого tnx –

+0

Очень хорошо. Кстати, вы можете опасаться создания SQL-инструкций, подобных этому. Если в любом из этих строковых значений произошел апостроф, ваш SQL завершится с ошибкой. Лучше использовать '?' Placeholders, а затем привязывать значения к ним. Если вы сделаете это правильно, ваш код быстро станет громоздким, поэтому вы можете рассмотреть что-то вроде [FMDB] (https://github.com/ccgus/fmdb), который имеет такие функции, как 'executeUpdate' и' executeQuery', которые принимают массивы но выполняйте необходимые вызовы 'sqlite3_bind_text' для вас. – Rob

ответ

0

Если InsUpdateDelData вернулся NO , то это означает, что sqlite3_prepare_v2 не вернулся SQLITE_OK. Если вы хотите знать, почему он не вернулся SQLITE_OK, а затем зарегистрировать ошибку сразу после того, как sqlite3_prepare_v2 не удалось, но перед вызовом любые другие SQLite функции:

NSLog(@"err=%s", sqlite3_errmsg(database)); 
Смежные вопросы