代码之家  ›  专栏  ›  技术社区  ›  Z S

sqlite:我可以在循环通过另一个select语句时执行select语句吗?

  •  2
  • Z S  · 技术社区  · 16 年前

    在我的iPhone应用程序中,我使用一个sqlite表来保存我的数据。当我在其中一个表上循环执行select语句时,我希望在某些情况下在同一个表上执行另一个select(和update)语句。解释我为什么要这样做是很复杂的,但我很确定我需要这样做。

    问题是,当我在外部while循环中循环时,如果调用内部select语句,它会在运行之后终止外部循环,即使SQL语句中有更多的行。那么这是不可能的吗?当我在同一个表上遍历sqlite3_步骤结果时,可以调用select语句吗? 下面是一些psuedo代码(在objective-c中)来解释我在做什么:

    sqlite3_exec(database, "BEGIN", 0, 0, 0); // Begin Transaction
    
        if (init_all_statement == nil)
        {
            const char *sql = "SELECT id, fullname FROM contact";
    
            if (sqlite3_prepare_v2(database, sql, -1, &init_all_statement, NULL) != SQLITE_OK) {
                NSAssert1(0, @"Error Test.m: failed with message '%s'.", sqlite3_errmsg(database));
            }
        }
    
        while (sqlite3_step(init_all_statement) == SQLITE_ROW)
        {
            ...
    
            if (blah) 
            {
                if (get_duplicate_rows == nil)
                {
                    const char *sql = "SELECT id, fullname FROM contact where fullname = ?";
    
                    if (sqlite3_prepare_v2(database, sql, -1, &get_duplicate_rows, NULL) != SQLITE_OK) {
                        NSAssert1(0, @"Error Test.m: failed with message '%s'.", sqlite3_errmsg(database));
                    }
                }
    
                sqlite3_bind_text(get_duplicate_rows, 1, [contact_fullname UTF8String], -1, SQLITE_TRANSIENT);
    
                while (sqlite3_step(get_duplicate_rows) == SQLITE_ROW)
                {
                    ...
                }
                sqlite3_reset(get_one_row);
            }
    
        }
    
    1 回复  |  直到 16 年前
        1
  •  1
  •   vfn    16 年前

    是的,可以,您只需要创建一个新的语句来接收新的结果

    sqlite3_stmt *statement;

    干杯,
    变频调速