【问题标题】:How to execute two insert query in single statement in sqlite3 [duplicate]如何在sqlite3的单个语句中执行两个插入查询[重复]
【发布时间】:2015-06-26 07:27:17
【问题描述】:

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

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

【问题讨论】:

  • 制作一种方法来处理更多的查询
  • 您是否将uid 设为主键(唯一且非空)?那么它不会插入您的记录,因为您每次插入记录时都在传递uid1
  • 我知道,但要处理两个查询,我必须打开和关闭数据库两次。
  • @Sujay 我创建了没有主键的 uid

标签: ios sqlite


【解决方案1】:

您需要检查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));

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 2017-02-02
    • 2017-01-11
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多