Androidでは,SQLiteデータベースを使うことができる。SQLiteはご存じのように組み込み用の軽量なデータベースで,iPhoneやAdobe AIRで利用することができる。現在,もっとも注目されているデータベースの一つであるが,これまでのデータベースの延長線上で考えると面食らうところもある。

 SQLiteはMySQLやPostgreSQLのようにオープンソースで開発・提供されているデータベース管理システムなので,無償で利用可能だ。

 特長はと言うと,まず,SQLiteデータベースはクライアント/サーバー方式のデータベースではなく,ファイル型のデータベースである。データベースを作成するとファイルができる。

 SQLを十分にサポートしており,トランザクション処理やプリペアド・ステートメントが利用できる。ここまで書くと,米Microsoftの「Microsoft Office Access」データベースに似ているような感じがする。

 しかし,SQLiteで利用できるデータ型は,INTEGER,REAL,TEXT,BLOB,NULL型と少なく,データ型のチェックもあるような,ないような感じである。数値型のフィールドに文字列が入力可能だったりする。では,柔軟ゆえに遅いかと言うと,そんなこともない。つかみどころがなく,でも,つかいやすいデータベースがSQLiteだ。

 さっそく,データベースを使うプログラミングに進もう。Androidでは,データベースをメモリーに作成するか,ストレージに作成するかを選択できるが,それ以外の操作については,特に変わったことはないJavaでのデータベースの操作である。

--------------------------------------------------------------

public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DBNAME="sqdata";
private static final int DBVERSION= 1 ;
	
private static final String CREATE_TABLE_SQL = 
  "create table memotb "
  + "(rowid integer primary key autoincrement,"
  + "date text not null,"
  + "title text not null,"
  + "memo text not null)";
	
public DatabaseHelper (Context context) {
  super(context,DBNAME,null,DBVERSION);
}

--------------------------------------------------------------

 データベースを扱うには,SQLiteOpenHelperクラスを継承するクラスを作る。DatabaseHelperクラスのコンストラクタでsuper(context,DBNAME,null,DBVERSION);と,親クラスのコンストラクタを呼び出しているが,第2引数をデータベース名としたときは,ストレージにデータベースが作成される。nullを指定するとメモリーにデータベースが作成させる。

--------------------------------------------------------------

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

}
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion,
                int newVersion) {
// do nothing
}

--------------------------------------------------------------

 SQLiteOpenHelperクラスのonCreateメソッドとonUpgradeメソッドは抽象クラスなので,オーバーライドしなければならない。onCreateメソッドはデータベースを作成したタイミングで呼び出されるので,テーブルを作成するSQL文をdb.execSQLで実行している。

 今回は省略しているが,Upgradeには,テーブル構造の変更やデータ・コンバート処理を記述する。

--------------------------------------------------------------

public class SqdbTest extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
    DatabaseHelper dbHelper = new DatabaseHelper(this);

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

--------------------------------------------------------------

 Activityを継承するSqdbTestクラスではDatabaseHelperクラスのオブジェクトを生成したうえで,dbHelper.getReadableDatabase()でデータベースを開き,db.close()で閉じている。これでデータベースが作成される。

 Settings→Applications→Manage ApplicationsでSqdbTestを選ぶと,ストレージにDataが「8.00KB」の領域を占めていることがわかる。

 Eclipseからはエミュレータ起動中に,Window→ShowView→Other→Android→File Explorerでデータベースsqdataが作成されていることを確認できる。