データベースの作成
データベースの作成から行います。「ApplicationContext」クラスで用意されている「createDatabase」メソッドを使います。
createDatabase public SQLiteDatabase createDatabase(String name, int version, int mode, CursorFactory factory)
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を発行するための各種メソッドが用意されています。
サンプルプログラム
それでは実際に試してみます。プロジェクトを作成しソースコードを次のように変更しました。
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 )