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()を使用して更新や削除もできる。
- 作者: 金田浩明
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2017/04/28
- メディア: 単行本
- この商品を含むブログを見る
TECHNICAL MASTER はじめてのAndroidアプリ開発 第2版 Android Studio 2対応
- 作者: 山田祥寛
- 出版社/メーカー: 秀和システム
- 発売日: 2016/12/16
- メディア: 単行本
- この商品を含むブログを見る