2015-06-26 3 views
0

Я пытаюсь вставить значения в две разные таблицы в одной инструкции, первый запрос на ввод в рабочий второй запрос не работает.Как выполнить два запроса вставки в одном выражении в sqlite3

sqlite3_stmt * statement= NULL; 
const char *dbpath =[databasePath UTF8String]; 

if (sqlite3_open(dbpath, &mySqliteDB)== SQLITE_OK) 
{ 
    for (PostObject * post in in_PostObject) 
    { 
**query** 
     NSString * postSql =[NSString stringWithFormat:@"insert or ignore into %@_post (postid,data,active) values (\"%@\",?,\"%d\");",tblPrefix,post.post_ID,post.active]; 

/*Appending First query with second query*/ 
     NSString * insertSQl =[postSql stringByAppendingString:[NSString stringWithFormat:@" insert into %@_forumuser (uid,utype,name) values (1,'parent','javid');",tblPrefix]]; 
     NSLog(@"%@",insertSQl); 
     const char * insert_stmt=[insertSQl UTF8String]; 
     sqlite3_prepare_v2(mySqliteDB, insert_stmt, -1, &statement, NULL); 
     sqlite3_bind_text(statement, 1, [post.jsonData UTF8String], -1, SQLITE_TRANSIENT); 
     if (sqlite3_step(statement)==SQLITE_DONE) 
     { 
      success =TRUE; 
     } 
     else 
     { 
      NSLog(@"DB Error: %s", sqlite3_errmsg(mySqliteDB)); 
     } 
    } 
} 
    sqlite3_finalize(statement); 
    sqlite3_close(mySqliteDB); 
+0

сделать метод для обработки еще один запрос – karthikeyan

+0

вы сделали 'uid' как первичный ключ (уникальный, а не нулевой)? то он не будет вставлять вашу запись, потому что вы передаете значение 'uid'' 1' каждый раз, когда запись ввода wile – Sujay

+0

Я знаю это, но для обработки двух запросов мне нужно дважды открывать и закрывать БД. – Sam

ответ

0

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

Также вам не нужно открывать и закрывать базу данных для каждого оператора вы хотите выполнить, то вы можете обработать их как 2 заявления

if(sqlite3_prepare_v2(mySqliteDB, insert_stmt,-1, &statement, NULL) != SQLITE_OK) { 
    NSLog(@"%s Prepare failure '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(db), sqlite3_errcode(db)); 

}