2010年9月9日木曜日

Android SQLiteデータベースを作成する

AndroidではSQLiteがサポートされています。
データベースはアプリケーション毎に管理され、他のアプリケーションからは直接操作できません。

SQLiteのデータ型は下記の5種類のみ
INTEGER・・・符号付整数
REAL・・・浮動小数点
TEXT・・・テキスト
BLOB・・・バイナリデータ
NULL・・・NULL

データベースの作成にはSQLiteOpenHelperクラスを使用すると便利です。
このクラスを継承したデータベースヘルパークラスを作成し、データベースの作成、アップグレードを実装します。

SQLiteOpenHelperクラスのコンストラクタ
SQLiteOpenHelper(Context context, String fileName, SQLiteDatabase.CursorFactory factory, int version)
context・・・コンテキストオブジェクト
fileName・・・データベース名
factory・・・よくわかりません。通常nullを指定
version・・・データベースのバージョン

onCreate()メソッドはデータベースが作成された時に呼ばれます。
テーブルの作成などを行います。
void onCreate(SQLiteDatabase db)

onUpgrade()メソッドはデータベースをバージョンアップした時に呼ばれます。
現在のレコードを退避し、テーブルを再作成した後、退避したレコードを戻すなどの処理を行います。
>void onUpgrade(SQLite db, int oldVersion, int newVersion)

DatabaseHelper.java
package my.study.android;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class DatabaseHelper extends SQLiteOpenHelper {
 
    /* データベース名 */
    private final static String DB_NAME = "androidstudydb";
    /* データベースのバージョン */
    private final static int DB_VER = 1;
 
    /*
     * コンストラクタ
      */
    public DatabaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VER);
    }

    /*
     * onCreateメソッド
     * データベースが作成された時に呼ばれます。
     * テーブルの作成などを行います。
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "";
        sql += "create table MyTable (";
        sql += " No integer primary key autoincrement";
        sql += ",Name text not null";
        sql += ",Tel text";
        sql += ",Age integer";
        sql += ")";
        db.execSQL(sql);
    }

    /*
     * onUpgradeメソッド
     * onUpgrade()メソッドはデータベースをバージョンアップした時に呼ばれます。
     * 現在のレコードを退避し、テーブルを再作成した後、退避したレコードを戻すなどの処理を行います。
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  
    }

}

MainActivity.java
package my.study.android;  

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

public class MainActivity extends Activity {
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub);
        //データベースヘルパーのインスタンスを作成する(まだデータベースはできない)
        DatabaseHelper dbHelper = new DatabaseHelper(this);
        //データベースオブジェクトを取得する(データベースにアクセスすると作成される。)
        SQLiteDatabase db = dbHelper.getWritableDatabase(); 
        //データベースを閉じる
        db.close();
    }  
}

作成したデータベースを確認するには、Android SQLiteのGUIツールを見てください。


【関連項目】
Android SQLiteデータベースを作成する
Android SQLiteのGUIツール
Android データベースにデータを書き込む(Insert、Update、Delete)
Android データベースのデータを読み込む(Select)
Android SQLiteデータベースを作成する(SQL文をリソースファイルに定義する)

1 件のコメント:

ヘンリー さんのコメント...

サンプルコード、とても参考になりました!
質問があるのですが、MainActivity.javaのsetContentView(R.layout.sub)のsubというのはxmlファイルですよね?コードをそのまま引用させていただいているのですが、「予期せぬ停止」が表示されてうまくいきません。記載されていないことで、やらなければいけないことってあるのでしょうか?