6

CursorAndroidでの実装の詳細に興味があります。基本的には、データベースクエリによって返される結果セットへのランダムな読み取り/書き込みアクセスを提供するインターフェイスにすぎないことを私は知っています。Cursor私は特定の実装について疑問に思います:

  1. データベースからの結果セットを格納するある種のデータ構造ですか?
  2. それとも、1行だけを処理する構造ですか?
4

1 に答える 1

6

データベースからの結果セットを格納するデータ構造です

はい。

それとも、1行だけを処理する構造ですか?

ではない正確に。カーソルは、ソースクエリに基づいて1つ以上の行を処理できます。カーソルはデータのマップであり、source(select)クエリが返すのと同じ数の行が含まれます。したがって、クエリが100行を返す場合、これらの行はカーソルに挿入され、カーソルにはこれらの100行が含まれます。

カーソルは、データが「行」として配置される動的サイズ(リストと同様)のデータのマップとして想像できます。各行には独自の行ID(行番号、ポインタと言えます)があり、カーソルに挿入されると徐々に生成され、この番号の行間を簡単に移動できます。暗黙的に、各カーソルには最初の行(-1の位置)の前に「実際のポインタ」が配置されているため、呼び出すc.getString(0)と、取得するものがないため、期待値がスローされます。

したがって、常にcursor.moveToFirst()そのprepare Cursorを呼び出して読み取る必要があり、空の場合、行がないため、メソッドはfalseを返します。

于 2013-03-20T09:43:28.330 に答える