久しぶりにandroidネタでいきます。
androidの端末内にデータを保持する場合、プリファレンス、ローカルファイル、データベースといった方法があります。
今回はデータベースについて記載していきます。
android以外の開発経験がある人にとってはお馴染みのデータベースですが、
androidの場合はSQLiteというデータベース管理システムが備わっています。
MySqlなど他の言語でSQLを操作したことがある人にとって、
一番最初に疑問が発生するのはCreate Tableをアプリ内で行うということではないでしょうか!!
他のサイトでSQLiteの使い方を載せてるところは結構多いのですが、
Create Tableをアプリ内で行うことを明示的に書いているところが少なく、
「テーブルはどうやって作るの??」と思っている人が多いようです。
※私もそうでした。。。固定概念はおそるべし。
Webサービスの開発では、DB用のサーバがあって、WebサービスからDBに接続することが一般的だと思いますが、
androidアプリのように端末で完結する場合は事前にDBを用意することが出来ない為、
アプリ内でテーブルを作る必要があります。
※APIでDBサーバと連携する場合は別ですが。。。
今回はアプリ内でテーブルを作成するサンプルコードを記載いたします。
今回重要になってくるのはSQLiteOpenHelperというヘルパークラスです。
このクラスは、データベースの作成やデータベースデータベースのバージョンアップ時にonUpgradeを呼び出します。
データベースのバージョンアップですが、通常のWebサイトの場合は仕様変更等で
カラムが追加された場合はDBサーバに対して変更のSQLを投げればいいのですが、
androidの場合は端末にDBがあり、一工夫しないといけません。
その際に利用するのがonUpgradeですが、これに関してはまた
別の機会に説明しようと思います。
※androidでカラム追加などする場合は、個人個人の端末になるので、人によってはバージョン1からバージョン3など
一気に上げた場合の工夫が必要です。
また、既に登録されているデータを壊さないように注意が必要です。
バージョンアップの度にデータが飛ぶとかまじでありえないですから。。。
さて、話が長くなりましたが、コードを書いていきます。
/src/com.example.sample_sql.db/DatabaseHelper.java
色々なところで呼べるような作りにしておきます。
package com.example.sample_sql.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; /** * SQLite処理Helper */ public class DatabaseHelper { // Databaseバージョン private static final int DATABASR_VERSION = 1; // Databaseファイル名 private static final String DATABASE_FILE_NAME = "SAMPLE.db"; private DatabaseOpenHelper mDbOpenHelper; private SQLiteDatabase mDb; /** * コンストラクタ * @param context */ public DatabaseHelper(Context context) { mDbOpenHelper = new DatabaseOpenHelper(context, DATABASE_FILE_NAME, null, DATABASR_VERSION); } /** * DBオープン */ public void openWrite() { // データベースのオープン mDb = mDbOpenHelper.getWritableDatabase(); } /** * Close */ public void close() { mDbOpenHelper.close(); } /** * データベースオープン用のヘルパー */ private class DatabaseOpenHelper extends SQLiteOpenHelper { /** * コンストラクタ * @param context * @param dbName * @param factory * @param version */ public DatabaseOpenHelper(Context context, String dbName, CursorFactory factory, int version) { super(context, dbName, factory, version); } /** * DB生成 */ @Override public void onCreate(SQLiteDatabase db) { // サンプルテーブルの作成 db.execSQL( "CREATE TABLE sample_table (" + "_id integer primary key autoincrement," + "name text not null, " + "biko text" + ")" ); } /** * バージョンアップ */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 今回は特に何もしません。 } } }
/src/com.example.sample_sql/MainActivity.java
起動時にDBが作成される作りにしています。
package com.example.sample_sql; import android.os.Bundle; import android.app.Activity; import android.view.Menu; // SQLite用のヘルパー import com.example.sample_sql.db.DatabaseHelper; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override protected void onResume(){ super.onResume(); // データベースヘルパーのインスタンス生成 DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext()); // データベースのオープン(ここでDBとテーブルが作成される) dbHelper.openWrite(); dbHelper.close(); } }
ソースコードを見てもらうとわかると思いますが、onCreateでテーブルを作成していますが、
これはデータベースを新規に作成した場合に呼ばれるので、何度もCreate Tableが呼ばれないようになっています。
最後にDBが作成されたか確認する方法ですが、
Windowsの場合、android-sdk/sdk/tools/ddms.batを実行すると
Guiが立ち上がるので、そこからエミュレート端末を選択し、Device->File Explorerを選択、
子画面が開くので「/data/data/対象アプリ/database/データベース名」が出来ていればOKです。
Post Footer automatically generated by Add Post Footer Plugin for wordpress.
コメントを残す