sqlite: могу ли я сделать оператор выбора при циклическом прохождении другого оператора выбора - PullRequest
2 голосов
/ 13 января 2010

В своем приложении для iPhone я использую таблицу sqlite для хранения своих данных. В то время как я зацикливаюсь на операторе выбора для одной из таблиц, я хочу сделать в некоторых условиях еще один оператор выбора (и обновления) для той же таблицы. Довольно сложно объяснить, почему я хотел бы сделать это, но я уверен, что мне нужно.

Проблема в том, что когда я перебираю внешний цикл while, если я вызываю внутренний оператор выбора, он завершает внешний цикл после этого выполнения, даже если в операторе sql больше строк. Так это невозможно? Могу ли я вызвать оператор выбора, пока я зацикливаюсь на результатах sqlite3_step для той же таблицы? Вот некоторый псевдо-код (в target-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 Ответ

1 голос
/ 13 января 2010

Да, это возможно, вам нужно только создать новую выписку, чтобы получить новые результаты

sqlite3_stmt *statement;

Приветствия,
VFN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...