データベースの作成

広告

データベースの作成から行います。「ApplicationContext」クラスで用意されている「createDatabase」メソッドを使います。

Create a new private SQLiteDatabase associate with this Context's 
application package. Throws FileNotFoundException if the databse 
could not be created.

Parameters:
  name  The name (unique in the application package) of the database.
  version  A version number to tag the database with.
  mode  Operating mode. Use 0 or MODE_PRIVATE for the default operation, 
    MODE_WORLD_READABLE and MODE_WORLD_WRITEABLE to control permissions.
  factory  An optional factory class that is called to instantiate a 
    cursor when query is called.
Throws:
  FileNotFoundException  java.io.FileNotFoundException

1番目の引数にはデータベース名を文字列で指定します。2番目の引数には作成するデータベースのバージョンを指定します(SQLiteのバージョンではありません)。

3番目の引数にはモードを指定します。指定できる値は3つ用意されています。

Context.MODE_PRIVATE
Context.MODE_WORLD_READABLE
Context.MODE_WORLD_WRITEABLE

「MODE_PRIVATE」はデフォルトの値で作成されたデータベースファイルには現在のアプリケーションしかアクセスできません。「MODE_WORLD_READABLE」を指定した場合には他のアプリケーションからも参照が可能になります。「MODE_WORLD_WRITEABLE」を指定した場合には他のアプリケーションから書き込みも可能となります。

4番目の引数にはカーソルを指定するようですが詳細が不明ですので「null」を指定しておきます。

データベースの作成に成功すると作成したデータベースを開き、そのデータベースを表す「SQLiteDatabase」クラスのオブジェクトを取得できます。

このメソッドを実行する場合には例外として「java.io.FileNotFoundException」が発生する可能性があります。

具体的には次のように記述します。

private int DB_VERSION = 1;
private int DB_MODE = Context.MODE_PRIVATE;

SQLiteDatabase db;
try {
    db = createDatabase("db01_01", DB_VERSION, DB_MODE, null);
} catch (FileNotFoundException e) {
    db = null;
}

SQLiteDatabaseクラス

データベースを作成したり開いたりした場合に取得できる「SQLiteDatabase」クラスのオブジェクトについて確認しておきます。クラス図は次のようになっています。

  • java.lang.Object
  • android.database.sqlite.SQLiteDatabase

「SQLiteDatabase」クラスではSQLを発行するための各種メソッドが用意されています。

サンプルプログラム

それでは実際に試してみます。プロジェクトを作成しソースコードを次のように変更しました。

Test01_01.java

package jp.javadrive.android;

import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import java.io.FileNotFoundException;

public class Test01_01 extends Activity implements OnClickListener{
    private final int FP = ViewGroup.LayoutParams.FILL_PARENT; 
    private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT; 
    private Button button;

    private int DB_VERSION = 1;
    private int DB_MODE = Context.MODE_PRIVATE;

    @Override protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.HORIZONTAL);
        setContentView(linearLayout);

        button = new Button(this);
        button.setText("Create Database");
        button.setOnClickListener(this);
        linearLayout.addView(button, createParam(WC, WC));
    }

    private LinearLayout.LayoutParams createParam(int w, int h){
        return new LinearLayout.LayoutParams(w, h);
    }

    public void onClick(View v) {
        SQLiteDatabase db;
        try {
            db = createDatabase("db01_01", DB_VERSION, DB_MODE, null);
        } catch (FileNotFoundException e) {
            db = null;
        }
    }
}

ビルド後にエミュレーター上で実行します。

データベースの作成

ボタンが1つ表示されています。ボタンをクリックするとデータベースを新規に作成します。

データベースが作成されたかどうかを確認してみます。作成されたデータベースファイルは「/data/data/(package_name)/databases」に配置されます。今回の場合であれば「/data/data/jp.javadrive.android/databases」ディレクトリです。シェルを使って確認してみましょう。

データベースの作成

データベース作成前は上記のようになっています。それではデータベース作成後に確認してみます。

データベースの作成

データベース名と同じ名前のデータベースファイル「db01_01」が作成されたことが確認できます。

( Written by Tatsuo Ikura )