2010年12月16日

SQLiteのデータは外部メモリに置くことができるか

さてはて、メモ帳をつくろうとすると、チュートリアルにもある通りSQLiteデータベースを使うことになるみたいですけど、Androidは基本内部メモリの/data/data/〜パッケージ名/database/にデータが保存されてしまうみたいです。
データベースというからには結構大きいサイズのDBを作りたくなると思うのですが、容量の限られた内部メモリというのはちょっと悲しい。
そもそも、できないはずがない!と思って色々調べましたが、どうもできている人はいるような情報もないではないですが、やり方がまったくといっていい程見つからず十日以上悩みました。
それでもうググるのは諦めて、心細い英語でリファレンスを見ながら、ようやく悟ったのが、直接SQLiteDatabase.openOrCreateDatabaseを使えばいいということ。
ほとんどの参考書ではSQLiteOpenHelperを継承した内部クラスを使うような形で書かれていたのですが、以下のようにすればできることが分かりました。

String sdPath = Environment.getExternalStorageDirectory().getPath().toString();
File dbfile = new File(sdPath + "/" + "my_db_name.db" ); 
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);

これでうまくいったので満足して、しばらく先へ進んでいましたが、ふと気になってもう一度調べると、SQLiteOpenHelperを継承したクラスでは排他処理などをちゃんとやってくれるけれど、直接openOrCreateDatabaseを使うとそれがないというような情報が……。
うぅぅぅ!
排他処理を自分でできるほどの技量はないので、ここは涙を呑んで仕様後退。
でも、メモ帳系アプリとはいえ、そこそこ大規模なデータを想定していたため、これは痛い後退。
こうやってどんどん理想から遠ざかっていくとどうなることやら。

しかし、SDカードにアプリを移動できるFroyoとかはこの辺りどうなるんですかね。アプリ本体と一緒にSDに移るのでしょうか?
まだ色々な理由があってSDKをバージョンアップしていないこともあり、ドキュメントを読んでませんけど。
posted by 白虹 at 23:13| Comment(0) | TrackBack(0) | Android開発
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/42121356

この記事へのトラックバック