前回から、Androidおよびリレーショナルデータベース管理システムのSQLiteを用いて、実際にデータベースを活用したアプリケーションを作成しています。前回はCurryDbHelperクラスを使ってインスタンスを作成しました。今回はその続きからはじめて、アプリケーションを完成させましょう。

データベースのテーブルを作る

 CurryDbHelperクラスが入ったCurryDbHelper.javaがリスト5(クリックでリストを表示、以下同)です。Androidでは、android.database.sqlite.SQLiteOpenHelperというヘルパークラスを継承したクラスからSQLiteのデータベースを操作します。そのクラスを使って、SQLiteデータベースの作成、テーブル作成、データベースのスキーマのバージョン管理といった作業を行います。その子クラスとしてCurryDbHelperを作ります。

 SQLiteOpenHelperは抽象クラスなので、必ず定義しなければいけないメソッドがあります。(1)のコンストラクタ、(2)のonCreateメソッド、(7)のonUpgradeメソッドです。

 (1)のコンストラクタでは、AndroidのContextクラスを使っています。Contextクラスには、実行中のアプリケーションとその周りの環境についての情報が入っています。SQLiteOpenHelperクラスから派生させたクラスでは、親クラスのコンストラクタにContextと作成したいデータベースの名前とスキーマのバージョン番号を渡すだけで、Android SDKがアプリケーション固有の領域にデータベースを作成してくれます。

 (2)のonCreateメソッドは、初めてデータベースを作成する際に呼び出されるもので、通常はテーブルを作成します。

表1●今回作るテーブル
SHOPテーブル(店舗マスター)
表1●今回作るテーブル-SHOPテーブル(店舗マスター)
MEMOテーブル(メモテーブル)
表1●今回作るテーブル-MEMOテーブル(メモテーブル)

 今回、データベースに表1のテーブルを作ります。AndroidのSQLiteを使う場合は、「_id」という主キーを用意することが推奨されています。_idという名前の主キーを用意することでコードを簡潔に記述できるのです。

 SHOPテーブルの_id列は店舗のID番号で、MEMOテーブルのSHOP_ID列で結合させて、SHOPに対するMEMOの一覧を得ることができるようにします。(3)でSHOPテーブル、(4)でMEMOテーブルを作ります。

 (5)で(8)を、(6)で(9)を呼び出します。ShopDaoクラスのinsertメソッドを使ってSHOPテーブルとMEMOテーブルに3件ずつデータを入れます。insertの前には、SqLiteDatabaseのbiginTransactionメソッドでトランザクションを開始し、setTansactionSuccessfulでデータベースの変更をコミットし、endTransactionでトランザクションを終了します。トランザクション制御しなくても、自動で1件ずつコミットが発生します。本文の例では、3件のデータしか格納しませんが、100件単位のような大量のデータを投入する場合は、1件単位でコミットすると性能が劣化します。そこで、まとめてコミットしました。次はShopDaoクラスを説明します。

この先は会員の登録が必要です。有料会員(月額プラン)は初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら