2

でシークする方法が見つかりませんsqlite3_stmt

ユーザーが入力して SQL を実行できるようにするための入力ビューがありますが、結果には大量のレコードが含まれている可能性があります。結果の一部を表示したいだけです。

例: stmt に 20000 行あります。しかし、最初の 2000 行 (0-2000) を表示したいです。ユーザーが次のボタンをクリックすると、次の 2000 行 (2000-4000) を表示したいと考えています。ユーザーが前のボタンをクリックすると、表示が巻き戻されます。だから私はstmtでシークしたい。しかし、stmt をシークするための SQLite3 関数が見つかりません。

C/C++ インターフェイスを使用しています。

4

1 に答える 1

2

SQLite は、その場でステートメントの戻り値を計算します。別の行に移動する唯一sqlite3_stepの方法は、 ;を呼び出すことです。後ろに移動することはできません。

すべての行を読み取ってどこかに保存することもできますが、行が多すぎると実用的ではなくなります。

LIMIT/OFFSET 句を使用して個別のクエリを実行し、結果を現在のウィンドウに制限できます。ただし、オフセット値が大きくなると、SQLite はこれらすべてのレコードを計算しなければならないため、これは非効率的になります。

スクロール カーソルを実装するには、ページの最後 (/最初) のレコードを保存し、そのレコードの後 (/前) の次 (/前) の 2000 レコードを返すようデータベースに要求する必要があります。これについては、SQLite wiki で詳しく説明されています

于 2013-04-28T05:59:53.253 に答える