sqlite:我可以在循环浏览另一个select语句时执行select语句

时间:2010-01-13 08:14:03

标签: iphone sqlite

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

问题是当我循环遍历外部while循环时,如果我调用内部select语句,它会在该运行之后终止外部循环,即使它在sql语句中有更多行。这不可能吗?当我在同一个表上循环sqlite3_step结果时,我可以调用select语句吗? 这里有一些伪代码(在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 个答案:

答案 0 :(得分:1)

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

sqlite3_stmt *statement;

干杯,
VFN