今回は,Android OSに搭載されているRDBMS「SQLite」について解説します。
前回のおさらい
前回は,Android OSのユーザインターフェースのパーツの使い方を学びました。
具体的には,
- Androidのレイアウトシステム
- リストビューの使い方
の説明をしました。
物足りないと感じた方は,ぜひともサンプルプログラムに手を加えて,イメージするユーザインターフェースを持つアプリを構築する時間を作って下さい。少ない手掛かりで進めるのは,回り道にも感じますが,試行錯誤して身に付けた知識やノウハウは,問題解決の際や新しい切り口を検討する際の糧となるはずで,決して無駄にはならず,回り道にもなりません。
SQLiteとは?
今回は,Android OSに搭載されているリレーショナルデータベースシステム「SQLite」を取り上げます。
SQLiteをご存じではない方のために,簡単にご紹介します。SQLiteは,データ保存に単一ファイルを使用する,クロスプラットホームの軽量リレーショナルデータベースシステムです。一般的なデータベースサーバーとは異なり,アプリに組み込まれて使われます。データベースの操作は,プロトコルやプロセス間通信を使わず,APIを呼び出すので高速に動作するのところが特徴です。
SQLiteで扱えるデータ型は,以下の5種類で非常にシンプルです。
| INTEGER | 符号付整数 |
| REAL | 浮動小数点 |
| TEXT | テキスト |
| BLOB | バイナリデータ |
| NULL | NULL |
一般的なデータベースでは,カラムごとにデータ型を指定し格納できる値が決められていますが,SQLiteでは,テーブルを作成するときに,データ型を指定しなくても良い寛大な設計になっているところも特徴的な部分です。
それでは,SQLiteの使い方をご紹介します。
今回も例として上げているコードは,サンプルプログラムとして以下からダウンロードできます。
ヘルパークラスの実装
SQLiteOpenHelperというヘルパークラスを継承してDBOpenHelperクラスを作成します。
SQLiteOpenHelperクラスのコンストラクタには,第一引数にContext,第二引数にデータベース名,第三引数にCursorFactory,第四引数にデータベースのバージョン番号といった値が渡します。
public DBOpenHelper( Context context )
{
super( context, DB_NAME, null, DB_VERSION );
}
テーブルの作成
まずは,テーブルを作成します。
SQLiteOpenHelperクラスは,オブジェクトが生成されるとデータベースが存在するか確認され存在しない場合は,onCreateメソッドが呼び出されます。このタイミングで,以下のようなテーブルを作成するクエリーを実行します。
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(
"CREATE TABLE IF NOT EXISTS Test ( _id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , caption TEXT )"
);
}
アップグレード処理
SQLiteOpenHelperクラスには,データベースをアップグレードする仕組みがあります。
SQLiteOpenHelperクラスのオブジェクトが生成されると,スキーマのバージョンのチェックが行われ,バージョンが変更されているとonUpgradeメソッドが呼び出されます。
たとえば,バージョン1のデータベースに,新しいフィールドを追加して,バージョン2とする場合は,以下のようなコードになります。
public DBOpenHelper( Context context )
{
// バージョンを 2 にする
super( context, DB_NAME, null, 2 );
}
スーパークラスのコンストラクタの第三引数は,バージョンなので2に設定します。
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if( oldVersion == 1 )
{
// アップグレードコード
db.execSQL( "ALTER TABLE Test add add_text TEXT" );
}
}
バージョンが1から2に変更されたので,onUpgradeメソッドが呼び出されます。
onUpgradeメソッドの第二引数には,古いバージョン番号が入っているので,これをチェックしてテーブルのアップグレードコードを実行します。
onUpgradeメソッドは,ユーザの手を煩わせることなくデータベースをアップグレードできるので,便利な仕組みですが使用には注意が必要です。
先でご説明したように,onUpgradeメソッドが実行されるのは,オブジェクトが生成されるタイミングです。この時に,多くのレコードが保存されているテーブルをまるごと変換するような時間のかかる処理を行うと,Android OSが応答しないアプリと判断して強制終了の確認ダイアログを表示します。onUpgradeメソッドで,時間がかかる処理を実行する時は,onUpgradeメソッドでフラグだけ立てて,別の機会に処理を行うなどの工夫が必要になります。

