ジャンル不定の日記です。

openOrCreateDatabase

引き続きAndroidアプリの開発について勉強中で、SQLite関連をやってるが、わかりにくい・・・


android.database.sqliteの下にSQLiteOpenHelperというクラスがあって、このクラスを使って初期化するのが一般的らしいんだが、
オーバーライドしたクラスを作成する必要があるので、アクティビティが複数あるならSQLiteOpenHelperもpublicなクラスで用意しないといけない。
つまり、ソースファイルを分離しなきゃダメぽい。


他にSQLiteDatabaseクラスにopenOrCreateDatabaseというメソッドがあって、メソッド一発で必要なら作成してopenできる。
こっちの方が簡単そうなんだが、引数はDBファイル名じゃなくてpathを渡す必要があり、ファイル名だけを指定するとアプリ実行時にエラーになる。


更に他に、android.content.ContextWrapperクラスの下に同じ名前のopenOrCreateDatabaseメソッドがある。
こちらはpathではなくファイル名を指定して、2番目の引数にファイルのモードを指定する。
ファイルのモードはint型だが、android.contentで定数が定義されていて、
定数名

パーミッション
MODE_PRIVATE0
660
MODE_WORLD_READABLE1
664
MODE_WORLD_WRITEABLE2
666
(パーミッションはMODE_PRIVATEしか確認してないが、意味を考えるとそうなると思う)

android.content.ContextWrapperはandroid.app.Activityが継承しているので、Activityを継承したクラスで使用可。


openOrCreateDatabaseが2種類あって凄くわかりにくいが、アプリ用のDBを作成(open)するにはandroid.content.ContextWrapperの方のメソッドを使えば良い感じ。
android.content.ContextWrapperはActivityが継承しているので別途import不要だが、DBの操作自体はandroid.database.sqlite.SQLiteDatabase等で行うので、操作するのにimportは必要。


てな感じと思ったんだが、
DB作成時にtable作成とかもしなきゃいけないし、SQLiteOpenHelperならonCreateメソッドで作成時処理を書けるから、
やっぱSQLiteOpenHelper使ったほうが良さそうかもしれない・・・
もうちょい勉強の必要あるな。