世界を目指せ!Androidアプリ開発入門

第8回 AndroidのSQLiteを学ぶ

この記事を読むのに必要な時間:およそ 3 分

今回は,Android OSに搭載されているRDBMS「SQLite」について解説します。

前回のおさらい

前回は,Android OSのユーザインターフェースのパーツの使い方を学びました。

具体的には,

  • Androidのレイアウトシステム
  • リストビューの使い方

の説明をしました。

物足りないと感じた方は,ぜひともサンプルプログラムに手を加えて,イメージするユーザインターフェースを持つアプリを構築する時間を作って下さい。少ない手掛かりで進めるのは,回り道にも感じますが,試行錯誤して身に付けた知識やノウハウは,問題解決の際や新しい切り口を検討する際の糧となるはずで,決して無駄にはならず,回り道にもなりません。

SQLiteとは?

今回は,Android OSに搭載されているリレーショナルデータベースシステム「SQLite」を取り上げます。

SQLiteをご存じではない方のために,簡単にご紹介します。SQLiteは,データ保存に単一ファイルを使用する,クロスプラットホームの軽量リレーショナルデータベースシステムです。一般的なデータベースサーバーとは異なり,アプリに組み込まれて使われます。データベースの操作は,プロトコルやプロセス間通信を使わず,APIを呼び出すので高速に動作するのところが特徴です。

SQLiteで扱えるデータ型は,以下の5種類で非常にシンプルです。

INTEGER符号付整数
REAL浮動小数点
TEXTテキスト
BLOBバイナリデータ
NULLNULL

一般的なデータベースでは,カラムごとにデータ型を指定し格納できる値が決められていますが,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メソッドでフラグだけ立てて,別の機会に処理を行うなどの工夫が必要になります。

著者プロフィール

傍島康雄(そばじまやすお)

5月30日生まれ。

モバイルデバイスが大好物。それで動くアプリの開発に喜びを感じている。スマートフォン前夜のWindows Mobile,PalmOSのアプリに情熱を傾けていたが,最近は停滞気味でコードを書くよりも文章を書く機会が多くなっており,文章を書くのも,プログラミングと同じくらい奥深い作業だと感じている。

ブログ:http://yasuos.com/blog/

コメント

  • 確認です。

    まとめ前の
    サンプルプログラムのDBOpenHelperのgetWritableDatabase, getWritableDatabase,
    の記載は
    サンプルプログラムのDBOpenHelperのgetWritableDatabase, closeWritableDatabase,
    でしょうか?

    何か意味を取り違えていたらごめんなさい。

    Commented : #1  ちょうしょしんしゃ (2011/02/27, 18:21)

コメントの記入