戌印-INUJIRUSHI- (Androidあれこれ)

Androidのプログラミングをメインにしてます。記事に貼られたソースコードはダブルクリックすることで行番号をはずしてコピーすることができます。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
08

スポンサーサイト

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

SQLite データベースを管理する : SQLiteOpenHelper

Android でデータベース(SQLiteDatabase) の管理を行うには SQLiteOpenHelper クラスを使うことが推奨されています。

SQLiteOpenHelper を使うことで、データベースの作成、アップグレードを簡単に行うことができます。
※ 実際にデータベースの操作を行うのは SQLiteDatabase クラスです

API Reference: SQLiteOpenHelper, SQLiteDatabase, SQLiteException

ソフトウェア技術ドキュメントを勝手に翻訳
Android 開発ガイド - フレームワークトピック - 8. データ保存 データベースの使用

----------------------------------------------------------------------
SQLiteOpenHelper を使うにはサブクラスを作成します。
Android 3.0 HoneyComb (API 11) からはダウングレードにも対応するようになりました。
onDowngrade() をオーバーライドせずにダウングレードを行うと以前と同様に SQLiteException が発生します。
package jp.inujirushi.android.sample.sql;

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

public class SampleSQLiteOpenHelper extends SQLiteOpenHelper {

private static final int DB_VERSION = 1;
private static final String DB_NAME = "sample.db";

/**
* コンストラクタ
* 作成するデータベース名、バージョンの指定はここで行います。
*/
public SampleSQLiteOpenHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}

/**
* データベース作成処理
* データベースが存在しないときに呼ばれます。
*/
@Override
public void onCreate(SQLiteDatabase db) {
StringBuffer sql;

// テーブルを作成する
sql = new StringBuffer();
sql.append("CREATE TABLE T_USER (");
sql.append(" USER_ID integer primary key autoincrement,");
sql.append(" NAME text NOT NULL");
sql.append(")");
db.execSQL(sql.toString());

// レコードを挿入する
db.execSQL("INSERT INTO T_USER (NAME) VALUES ('テスト太郎')");
db.execSQL("INSERT INTO T_USER (NAME) VALUES ('テスト花子')");
}

/**
* データベースのアップグレード処理
* コンストラクタで指定されたバージョンが、現在使用しているデータベースのバージョンより大きい時に呼ばれます。
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Upgrade Database ver.2
if (oldVersion < 2) {
StringBuffer sql = new StringBuffer();
sql.append("ALTER TABLE T_USER ADD COLUMN ");
sql.append(" AGE integer NOT NULL DEFAULT 0;");
db.execSQL(sql.toString());
}
// Upgrade Database ver.3
if (oldVersion < 3) {
StringBuffer sql = new StringBuffer();
sql.append("ALTER TABLE T_USER ADD COLUMN ");
sql.append(" ADDRESS text;");
db.execSQL(sql.toString());
}
}

/**
* データベースのダウングレード処理
* コンストラクタで指定されたバージョンが、現在使用しているデータベースのバージョンより小さい時に呼ばれます。
* ※ Android 3.0(API 11) から追加されました
*/
@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}

}

使い方は以下のとおり。
package jp.inujirushi.android.sample;

import jp.inujirushi.android.sample.sql.SampleSQLiteOpenHelper;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class SampleActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// SQLiteOpenHelper のインスタンスを生成します
// まだデータベースは作成されません
SampleSQLiteOpenHelper helper = new SampleSQLiteOpenHelper(this);

// データベースを書き込み可能で取得する
// ここでデータベースが作成されます(onCreate or onUpgrade)
SQLiteDatabase database = helper.getWritableDatabase();

// データベースを閉じる
database.close();
}
}
データベースの作成、アップグレードは書き込み可能なデータベースを取得する SQLiteOpenHelper#getWritableDatabase() が呼ばれたときに行われます。

データベースが存在しない時、またはアップグレードが行われていない時に読み取り専用のデータベースを取得する SQLiteOpenHelper#getReadableDatabase() を呼ぶと SQLiteException が発生するので注意してください。

----------------------------------------------------------------------
SQLiteOpenHelper#getWritableDatabase() でのデータベース作成・更新時の処理は以下のようになっています。
android.database.sqlite.SQLiteOpenHelper#getWritableDatabase()
データベース作成部を抜粋 (API 15)
int version = db.getVersion();
if (version != mNewVersion) {
db.beginTransaction();
try {
if (version == 0) {
onCreate(db);
} else {
if (version > mNewVersion) {
onDowngrade(db, version, mNewVersion);
} else {
onUpgrade(db, version, mNewVersion);
}
}
db.setVersion(mNewVersion);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}
データベースの作成・更新時にはトランザクションが張られているので onCreate()、onUpgrade() でのトランザクションの記述は行わないようにしてください。

【関連記事】
SQLite データベースを取得・作成する:openOrCreateDatabase
SQLite データベースをSDカードに保存する
スポンサーサイト

Comments

Leave a Comment


Body
プロフィール

とむ・やむくん

Author:とむ・やむくん
管理人について

Windows 7 / 64bit
Eclipse 4.2 Juno (日本語パッチ済)

スポンサーサイト
最新トラックバック
検索フォーム
ブロとも申請フォーム
QRコード
QR
Twitter
2013/01/04 19:00 カウント開始

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