1

sqlite3出力を再利用することは可能ですか?私はこのようなクエリを持っています:

            error = sqlite3_prepare_v2(conn,SQL_STMT_GET_FILE,-1, &res, &tail);
            error = sqlite3_bind_text(res, 1,file,strlen(file), SQLITE_STATIC);   assert(error == SQLITE_OK);
            if (error != SQLITE_OK) {
            handle_error("No matching record found.");

結果が解析されます

    while (sqlite3_step(res) == SQLITE_ROW) 
                //do something here with results for device X

たとえば、出力'res'を再利用したいのですが、コードフローは次のようになります。

    while (sqlite3_step(res) == SQLITE_ROW) 
                //do something here with results for device X


    //reset the cursor to starting position and scan through the records.

    while (sqlite3_step(res) == SQLITE_ROW) 
                //do something here with results for device Y

これを達成する方法は?同じSQLステートメントを2回再実行して、結果をフェッチしたくない。

4

1 に答える 1

2

自分でデータをキャッシュするか、クエリを再実行する必要があります。

Sqlite とスクロール カーソルに関するこのページの理由をお読みください。

問題は、sqlite3_step() 関数が事前に計算された結果セットをまったく処理しないことです。問題を考えるためのより適切で現実的な方法は、準備された各ステートメントが実際にはコンピューター プログラムであると想定することです。このプログラムをデバッガーで実行していて、計算の奥深くにある単一のステートメントにブレークポイントが設定されています。sqlite3_step() 関数を呼び出すことは、デバッガーの [実行] ボタンを押して、プログラムが終了するかブレークポイントに到達するまでプログラムを実行するようにデバッガーに要求するようなものです。Sqlite3_step() は、ブレークポイントに到達すると SQLITE_ROW を返し、終了すると SQLITE_DONE を返します。ブレークポイントに到達すると、「行」の値を見つけるためにローカル変数を調べることができます。次に、「実行」を押すことができます

于 2012-11-26T04:17:24.997 に答える