如何在sqlite3中的单个语句中执行两个插入查询

时间:2015-06-26 07:27:18

标签: ios sqlite

我试图在单个语句中将值插入两个不同的表中,第一个插入查询在第二个查询中不起作用。

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

1 个答案:

答案 0 :(得分: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));

}