AndroidでSQLiteデータベースを利用する(その2)

データを挿入するための操作は、例えば以下のように行う。

// ContentValuesのインスタンスにデータを格納
ContentValues values = new ContentValues();
values.put("data", 12345);
// データの挿入
db.insert("sample_table", null, values);

挿入するためのデータは一旦ContentValuesクラスのインスタンスに格納する。
put()を使い、カラム名をキーに値を渡すことで実現できる。
そして格納したデータをSQLiteDatabaseクラスのinsert()メソッドで挿入する。

なお、データ挿入にはexecSQL()メソッドも使用出来る。
しかし、insert()が新しく挿入したデータの件数を返却するのに対し、execSQL()は戻り値を持たないという違いがある。


一方でデータ取得操作はやや複雑になる。

// テーブルからデータを検索
Cursor cursor = db.query(
		"sample_table", new String[] {"_id", "data"}, 
		null, null, null, null, "_id DESC");
// 参照先を一番始めに
boolean isEof = cursor.moveToFirst();
// データを取得していく
while(isEof) {
	Log.d(TAG, "" + cursor.getInt(cursor.getColumnIndex("data")));
	isEof = cursor.moveToNext();
}
// 忘れずに閉じる
cursor.close();

まず、前提としてデータの検索結果はCursorクラスのインスタンスとして返される。
Cursorインスタンスの取得方法(=データを検索する方法)はいくつかあるが、上のコードはquery()メソッドを使用してデータ検索を行っている。
query()の第一引数にはテーブル名、第二引数には取得対象のカラム名を配列の形で指定する。
第三引数以降は取得条件(like演算子など)やgroup by句、order by句を指定する。今回はorder by句のみ指定して、あとはnullにしている。

このようにして検索した結果はcursorに格納され、今度はcursorからデータを取得していくことになる。

全件取得する場合は、moveToFirst()メソッドを使用し、確実にcursor内のデータ参照先を先頭に持ってくる。
その後、ループを回しながらmoveToNext()メソッドを使用することで参照先を後ろに1つずつずらし、逐次的にデータを取得していく。
実際の取得メソッドはgetInt()であり、引数にカラムのインデックスを指定すれば対象カラムのデータが取得できる。
なお、getColumnIndex()メソッドを使用すればカラム名からインデックス値が取れる。


以下は、データ挿入と取得を使用したコード。
ボタンを押すとデータ挿入し、全データを取得する。取得したデータはLogCatに吐いている。

当然他にも、update()やdelete()を使用して更新や削除もできる。

はじめてのAndroidプログラミング 改訂版

はじめてのAndroidプログラミング 改訂版