2011/03/13

SDカードにSQLiteDatabaseを構築する方法

WeatherNowでは次バージョンでアメダス・天気情報をデータベース化します。
実際に作って試してみたところアメダス情報79レコードで16KBとなり、将来的に内部ストレージに保存するにはちょっと厳しくなる。なのでSDカード上にデータベースを作ってみました。
*ここに載せているコードは実際のコードではなくブログ用に手打ちしています。ミスがあるかも知れませんが悪しからず。


先にこちらの記事から読んで下さいな。

まずは失敗コード。

このサイト様を参考に作ったのですが、これを実際に使ってみると
java.lang.IllegalArgumentException:
File /sdcard/weathernow/database/weathernow_database.db contains a path separator
と怒られてしまいました。ちなみにTargetAPIは7です(Android 2.1向け)。

SQLiteOpenHelperで管理するデータベースはどうやら"/"を含んではいけない様です。


以下、改善策。
SQLiteOpenHelperのソースを読んでも全く参考にならなかったのですが、グーグル先生で探したところこちらにSDカード上にデータベースを構築する方法がありました。


・DatabaseAccess.java(SQLiteOpenHelperの代わり)

こんな感じのを作りました。openDatabase()で一度データベースを開きさえすれば、後はSQLiteOpenHelperでの操作とほとんど変わらないと思います。


最後に、noxiはこの記事のエントリー時でやっとJava歴3ヶ月のペーペーであり、SQLiteに関してもほとんど知識はありません。この記事の内容通りに実装してエラーを起こしてデータベースにアクセスできなくなっても一切の保証は致しかねます。