連載
» 2012年09月13日 10時08分 UPDATE

Android Tips(19):SQLiteデータベースの基本操作 (1/2)

Androidアプリ開発者のためのTips集。Androidアプリケーションで使用できるデータベース「SQLite」について。まずは、データベースの基本操作について解説する。

[秋本耕平(イーフロー),@IT MONOist]
Android Tips

Tips概要と動作検証環境

用途 基本
カテゴリ データ処理
レベル 初級
動作確認環境 Android 2.3.3(GingerBread) エミュレータにて動作確認
備考 今回のTipsは上記環境で動作確認・検証を行っています


Tips 19:SQLiteデータベースの基本操作

 Androidを採用するメリットの1つが、データベースを利用したアプリケーションを簡単に作れることだ。今回は、Androidアプリケーションで使用できるデータベース「SQLite」の基本操作を紹介する。

SQLiteデータベースについて

 Androidには、SQLiteというデータベースが組み込まれており、アプリケーションから自由に利用できる。

 SQLiteは、Android専用に作られたものではない。組み込みアプリケーションなどで使用されている軽量データベースである。ライブラリとしてアプリケーションに直接組み込めるので、DBMS(DataBase Management System)サーバなどを介さずに手軽に使用できるのが大きな特徴だ。

 機能的には、一般的なデータベースと同様に「検索」「挿入」「更新」「削除」といった一通りの処理が行える他、バイナリデータの格納、トランザクションなども備える。

SQLiteDatabaseクラスとSQLiteOpenHelperクラス

 Androidアプリケーションで、データベース操作を行うには、「SQLiteDatabase」クラスを使用する。そして、このSQLiteDatabaseクラスのインスタンスを取得するための手順を簡略化してくれるのが、「SQLiteOpenHelper」クラスだ。

 データベースを使用するには、まずデータベースを保存するファイルを作成し、次にデータを格納するテーブルを定義し……といった準備が必要になる。SQLiteOpenHelperクラスを使用することで、こうした煩わしい初期処理を自動化できる。

 SQLiteOpenHelperは、abstractなクラスであり、以下のような実装を追加しておくと、必要なタイミングでデータベースの初期処理を実行してくれる。

  • データベース名(=データベースを保存するファイル名)
  • データベースのバージョン
  • テーブルの定義や、初期データの投入処理
  • データベースのバージョンアップ時の処理

SQLiteOpenHelperの実装例

 以下に、SQLiteOpenHelperのサブクラスの実装例を示す。この例では、“sample.db”という名前のデータベースを作成し、“name_book_table”テーブルを定義している。“name_book_table”は、人の名前(name)と年齢(age)を格納するための簡単なテーブルだ。

    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
 
 
    public class NameBookDBHelper extends SQLiteOpenHelper {
 
        // コンストラクタ
        public NameBookDBHelper( Context context ){
            // 任意のデータベースファイル名と、バージョンを指定する
            super( context, "sample.db", null, 1 );
        }
 
 
        /**
         * このデータベースを初めて使用する時に実行される処理
         * テーブルの作成や初期データの投入を行う
         */
        @Override
        public void onCreate( SQLiteDatabase db ) {
            // テーブルを作成。SQLの文法は通常のSQLiteと同様
            db.execSQL(
                    "create table name_book_table ("
                    + "_id  integer primary key autoincrement not null, "
                    + "name text not null, "
                    + "age  integer )" );
            // 必要なら、ここで他のテーブルを作成したり、初期データを挿入したりする
        }
 
 
        /**
         * アプリケーションの更新などによって、データベースのバージョンが上がった場合に実行される処理
         * 今回は割愛
         */
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // 取りあえず、空実装でよい
        }
    }

 データベースのファイル名とバージョン番号は、コンストラクタで指定している。このクラス(NameBookDBHelper)を使って実際にデータベースをオープンする際、万一、指定した名前のファイルが存在しない場合は自動的に作成してくれる。

 データベースファイルを作成した直後に、onCreate()メソッドが呼ばれ、そこに記述されているテーブル作成の処理などが実行される。なお、テーブルの作成には、SQLiteDatabaseのexecSQL()メソッドを使用している。execSQL()は、SQLをそのまま実行するメソッドだ。

 onUpgrade()メソッドは、今回は特に何も実装していない。ソースコード上のコメントにも記述したが、このメソッドはデータベースバージョンの更新時に実行される処理なので今回は割愛している。

データベースのオープン

 SQLiteOpenHelper(のサブクラス)を使って、実際にデータベースを開くには、getWritableDatabase()メソッドを使用する。

        // Helperを使用してデータベースを開く
        NameBookDBHelper dbHelper = new NameBookDBHelper( context );
        SQLiteDatabase db = dbHelper.getWritableDatabase();

 無事データベースのオープンに成功すると、SQLiteDatabaseのオブジェクトが返ってくる。このオブジェクトを使用して、データベースのさまざまな処理を実行する。

 以降で、SQLiteDatabaseオブジェクトを使ったデータベース操作について説明する。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.