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が作成されていることを確認できる。