androidでDBファイルをassetからコピーしたいけど消したくないテーブルがあるのです

前回のエントリで、assetから.sqliteファイルをコピーするようにしたおかげでDBHelper内でごりごりInsertしなくて良くなった!すごい!ということになりました。

が、新たな問題が発生……

前提

  • 私の作っているアプリは○×クイズ(のようなもの)である
  • 問題テーブルを一々Insertするのが面倒だから(遅そうだし)コピーすることにした
  • アプリ内には他に成績テーブルが存在する

つまり、問題テーブルを書き換えたいがために.sqliteファイルをコピーしたら、同じ.sqlite内にある成績テーブルまで消えてしまう!

当然といえば当然の話。

じゃあファイル別にすればいいじゃんと思いきや、SQLiteってスキーマとか無いから別のファイルどうやって見るのか謎だ。

調べてみたら「attach database」なるコマンドがあることが判明。

早速こちらを参考に実装。
ニクログ: AndroidSQLiteで別のデータベースへ値を移動する方法
http://miquniqu.blogspot.jp/2012/01/androidsqlite.html

SQLiteOpenHelper#getWritableDatabaseをOverrideしてattach databaseを実行すると上手くいきました!

良かった良かった。

 

参考までにコードを貼ろうとしたけど、新しいはてなブログのコードの貼り方が分からなくて断念。