今回は Android で SQLite を使用してデータを保存する方法を見てみます。
SQLite は、リレーショナル型データベースの一種ですが、MySQL や PostgreSQL のようなサーバ/クライアント方式ではなく、アプリケーション内に組み込んで使用するタイプの軽量データベースです。 大規模なデータの管理には不向きですが、組み込み機器内でのデータ管理にはよく使われているようです。
Android アプリ内で作成した SQLite データベースは、同一アプリ内のどのクラスからもアクセス可能ですが、他のアプリからはアクセスできません。
準備
SQLite を利用するためには、データベースの作成とバージョン管理を担当するヘルパークラスである SQLiteOpenHelper のサブクラスを作成しておきます。
その際、SQLiteOpenHelper で定義されている抽象メソッド onCreate() と onUpgrade() を実装する必要があります。
例えば、MyDBHelper という名前のクラスを以下のように作成します。
public class MyDBHelper extends SQLiteOpenHelper { private final static String DB_NAME = "test.db"; private final static int VERSION = 1; public MyDBHelper(Context context) { super(context, DB_NAME, null, VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE goods (" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "name STRING," + "price INTEGER)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVer, int newVer) { // データーベース構造の変換(省略) } }
このコードでは、「test.db」というデータベースに「goods」というテーブルを作成しています。
データの保存
データを保存する場合は、上記で準備したヘルパークラスのインスタンスから getWritableDatabase() メソッドでデータベースのインスタンスを取得し、insert() メソッドでデータを挿入します。
例えば、goods テーブルに60円の鉛筆のデータを追加する場合は以下のように記述します。
SQLiteDatabase db = helper.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put("name", "鉛筆"); cv.put("price", 60); db.insert("goods", null, cv);
追加するデータのカラム値を設定する際には、上記のように ContentValues オブジェクトを使用します。
データの読み出し
データを読み出す場合は、ヘルパークラスのインスタンスから getReadableDatabase() メソッドでデータベースのインスタンスを取得し、query() メソッドでデータを取得します。
SQLiteDatabase#query() メソッドの戻り値は Cursor オブジェクトで、Cursor#getString(int columnIndex) や Cursor#getInt(int columnIndex) メソッドなどを使用して特定のカラムのデータを取得します。
SQLiteDatabase db = helper.getReadableDatabase(); Cursor cs = db.query("greetings", null, null, null, null, null, null); if (cs.moveToFirst()) { do { String name = cs.getString(1); int price = cs.getInt(2); Log.d("TEST", message); } while (cs.moveToNext()); }
Cursor#moveToFirst() は、カーソルを先頭に移動するメソッドで、先頭のデータが無い場合(つまり何もデータが無い場合)は false を返します。 Cursor#moveToNext() はカーソルを次の行に移動するメソッドで、次のデータが無い場合は false を返します。
参考
公式サイトのデータ保存の説明ページ: Storage Options | Android Developers
公式サイトの SQLiteOpenHelper の説明ページ:SQLiteOpenHelper | Android Developers
公式サイトの SQLiteDatabase の説明ページ:SQLiteDatabase | Android Developers
公式サイトの ContentValues の説明ページ:ContentValues | Android Developers
公式サイトの Cursor の説明ページ: Cursor | Android Developers