1

xcodeから次のクエリを実行しています。ただし、結果は返されません。結果が返されるはずで、sqliteブラウザから同じクエリを実行することで同じことを確認できると確信しています。ただし、xcode内から、sqlite3_stepはコード101を返します。ここで何が間違っているのでしょうか。

    NSMutableArray *pages = [[NSMutableArray alloc] init];

    char *query = " \
    drop table if exists tempT; \
    \
    create temporary table tempT \
    as \
    select \
    Page \
    from \
    ( \
     select 1 as Sort, 'Home' as Page \
     union \
     select 2 as Sort, 'Research' as Page \
     union \
     select distinct 3 as Sort, Category as Page from Researches \
     union \
     select 4 as Sort, 'Drafts' as Page \
     union \
     select 5 as Sort, 'Outbox' as Page \
     union \
     select 6 as Sort, 'Download' as Page \
     union \
     select 7 as Sort, 'Settings' as Page \
     union \
     select 8 as Sort, 'Deleted' as Page \
     ) as Sub \
    ORDER BY Sort, Page \
    ; \
     \
    select Page from tempT order by rowid \
    ";
    sqlite3_stmt *stmt;
    if (sqlite3_prepare_v2(database, query, -1, &stmt, nil) == SQLITE_OK)
    {
        while (sqlite3_step(stmt) == SQLITE_ROW)
        {
            [pages addObject: [NSString stringWithUTF8String: (char *)sqlite3_column_text(stmt, 0)]];
        }

        sqlite3_finalize(stmt);
    }

    return pages;
4

1 に答える 1

0

sqlite3_prepare_v2最初のステートメントのみを準備します。3つのステートメントを個別に実行する必要があります。

参照:http ://www.sqlite.org/c3ref/prepare.html

pzTailがNULLでない場合、* pzTailは、zSqlの最初のSQLステートメントの終わりを過ぎた最初のバイトを指すようになります。これらのルーチンはzSqlの最初のステートメントのみをコンパイルするため、*pzTailはコンパイルされていないものを指します。

于 2012-12-22T02:41:14.830 に答える