スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

  • Comments (Close): -
  • TrackBack (Close): -

SQLiteOpenHelper

AndroidでSQLiteデータベースを作成するときは、SQLiteOpenHelperクラスを使います。

20111207_4

このクラスは、データベースの作成やバージョン管理に役立つヘルパークラスです。データベースの作成がまだ行われていなければ作成を行い、作成されていればそれを開きます。また、必要とあればデータベースのアップグレードを行います。

SQLiteOpenHelperクラスは抽象クラスのため、利用する場合はそれを継承した独自クラスを定義し、抽象メソッドであるonCreate()メソッドやonUpgrade()メソッドなどをオーバーライドして実装します。



今回は、sample.basicパッケージに SQLiteOpenHelperクラスを継承した DatabaseHelper.java を新たに作成します。

DatabaseHelper.java は、データベース sample.db を作成し、さらにSQLite Managerでさんざん作成した accountテーブルを作成するクラスとなります。

package sample.basic;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper{

private static final String DB_NAME = "sample.db";
private static final String TABLE = "account";
private static final int DB_VERSION = 1;
private static final String CREATE_TABLE =
"create table " + TABLE + "("
+"id integer primary key autoincrement,"
+"name varchar(30) not null,"
+"money integer);";

public DatabaseHelper(Context context){
super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}


SQLiteOpenHelperを継承したクラスでは、コンストラクタの生成、onCreate()メソッドとonUpgrade()メソッドのオーバーライドが必要になります。


コンストラクタ


まずコンストラクタです。SQLiteOpenHelperクラスを継承したクラス(今回は DatabaseHelperクラス)のインスタンスを作成して利用するのに必要になります。

SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)

インスタンスによるデータベースの操作は、getWritableDatabase()または getReadableDatabase()メソッドの呼び出しで行います。

引数は、1番目がContext型インスタンスで、どのアプリケーションか指示します。

2番目は、データベース名を指示します。nullにするとメモリ上にデータベースが作成され、ファイル名を指定した場合は
     /data/data/パッケージ名/database/ファイル名
に、データベースファイルが作成されます。

3番目はcursorオブジェクトを作るのに使いますが、デフォルトではnullを指定します。

4番目はバージョン情報です。


onCreate()とonUpgrade()


onCreate()メソッドは、データベースを始めて作成したときに呼び出されます。

public abstract void onCreate (SQLiteDatabase db)

今回は、SQLiteDatabaseクラスのexecSQL()メソッドでデータベースで使用するテーブルのcreate文を発行しました。

public void execSQL (String sql)

execSQL()メソッドは、SELECT文等のデータを返すのSQL文以外のクエリを実行可能です。

SQLiteOpenHelperクラスを継承したクラスを利用しないとしたら、データベースの存在確認をして、データベースが存在しなければ作成するという処理を行います。

SQLiteOpenHelperクラスを継承したクラスでは、この存在確認を行わなくとも、存在しなければonCreate()メソッドが呼び出され、存在すれば呼び出されないので非常に便利です。

onUpgrade()メソッドについては、今回は何も処理を行っていません。データベースをアップグレードする必要があるときに呼び出されます。


データベース作成


では DatabaseHelperクラスを使って実際にデータベースを作ってみましょう。

このブログで標準のJavaでメインメソッドに相当する扱いをしているのは HelloAndroid.javaなので、こちらのソースを変更します。

package sample.basic;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class HelloAndroid extends Activity{

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

DatabaseHelper dbHelper = new DatabaseHelper(this);

SQLiteDatabase db = dbHelper.getReadableDatabase();
db.close();
}
}


DatabaseHelperコンストラクタの引数は、getApplicationContext()メソッドを指定しても同じです。

データベースのオープンは、書き込みも行いたいときは getWritableDatabase()メソッド、読み取り専用でいいときは getReadableDatabase()メソッドを使います。

getWritableDatabese()でデータベースをオープンしたとき、ディスクの容量が不足していると、SQLiteExceptionがスローされます。この場合、例外処理で getReadableDatabase()を使うことも可能です。

上のソースでは単純化のため例外処理を行っていませんが、本格的なアプリでは必要でしょう。

関連記事
スポンサーサイト

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

Comments:

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://androidhacker.blog94.fc2.com/tb.php/83-7c7ff7c5
  • 閉じるボタン
レファレンス
月別アーカイブ
リンク
カテゴリ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。