私はカーソルから列値を取得しようとしています、この列はクエリ内の計算によって実行時に生成され、この列のnull値を取得しています、SQLiteテーブルに存在する他のすべての列の値を取得できます。
SQLiteエディターで同じクエリを実行すると、結果セットに生成された列の値も表示されます。
カーソルから取得するときにこれがヌル値を与えるのはなぜですか?
非常にシンプルで、次のいずれかの方法で取得できます
String id = cursor.getString( cursor.getColumnIndex("id") ); // id is column name in db
または
String id = cursor.getString( cursor.getColumnIndex(0)); // id is first column in db
カーソルの列名は大文字と小文字が区別されます。dbまたは列のエイリアス名で指定された大文字と小文字を一致させてください
選択クエリの列インデックスがわからない場合は、これに従ってください、
テーブルのすべてのフィールドに定数を定義して、スペルを確認する必要のないフィールド名を簡単に取得できるようにします
「DBConstant.Java」という名前のDatabase Costantクラスを作成し、テーブルフィールドを定義します
public static final String ID = "id";
次に、カーソルから値を取得し、
cursor.getString(cursor.getColumnIndex(DBConstant.ID));
cursor.getColumnIndex(フィールド名); select文cursor.getString(column index)のフィールド列インデックスを返します。その列にある値を返します
選択クエリで列インデックスがわかっている場合、
cursor.getString(0);
文字列値を取得したい場合
String id = cursor.getString( cursor.getColumnIndex("name") ); // id is column name in db
or
String id = cursor.getString( cursor.getColumnIndex(0));
整数値を取得する場合
String id = cursor.getInt( cursor.getColumnIndex("id") ); // id is column name in db
or
String id = cursor.getInt( cursor.getColumnIndex(0));
Android Studio 3.4.1(私はKotlinを使用していますが、ここでは違いはありません)で、非常に奇妙な動作を発見しました。
例えば:
Cursor c = db.rawQuery("Select IDH, ID, NOME, CONTEUDO from CalcHome
Inner Join Calcs using(id)", null)
列名は、Selectのフィールド名の大文字小文字に関係なく、厳密な方法で登録されました。配列コンポーネントc.columnNames[0]
はIdh
ではなくIDH
です
そう
int a = c.getInt(c.getColumnIndex("IDH")) // gives a runtime error.
だが
int a = c.getInt(c.getColumnIndex("Idh")) // works!