- ベストアンサー
Android内部のSQLiteデータベースを使う
- Androidアプリ内で既に存在するSQLiteデータベースを利用したいが、方法が分からない
- ExcelデータをCSVファイルに変換し、カンマ区切りでUTF-8に変換してSQLite3でインポートしたが、Android内のassetsフォルダからデータベースにアクセスできない
- 自作のデータベースにアクセスするためのコーディング方法やSQLiteHelperの利用方法を教えてほしい
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>sqliteの固定データベースを読み込みたいので・・ >今回の件に関しましてはreadonlyで大丈夫です。 いえ、readonlyかどうかに関わらず、SQLiteからアプリ内のリソースをデータベースファイルとしてアクセスすることはできない、ということなのです。assetsにあるのは、ファイルではなく、リソースですので。 ちなみに、多くのアプリでは、こうした場合、assetsに入れておいたデータベースファイルを指定の場所にコピーし、このコピーしたデータベースファイルにアクセスするように設計しています。アプリ起動時に指定の場所にデータベースファイルがあるかチェックし、なければassets内からコピーするようにしておくわけです。 InputStream input = mContext.getAssets().open(データベースファイル名); OutputStream output = new FileOutputStream(保存先のファイルパス); byte[] buffer = new byte[1024]; while ((size = mInput.read(1024)) > 0){ output.write(buffer, 0, 1024); } output.flush(); output.close(); input.close(); こんな感じで、assets内にあるリソースをInputStreamで開き、これを読み込んで指定の場所にファイルとして保存します。後は、保存されたデータベースファイルにSQLiteからアクセスします。
その他の回答 (1)
データベースファイルは、ストレージに保存する場合、/data/data/パッケージ/database/ファイル という場所に保存されるようになっています。これ以外の場所には、セキュリティの関係で保存はできません。 android内のassetsフォルダ内ということは、すなわちアプリのapkファイルの内部を書き換えることになります(実際のアプリでは、アプリで使うファイルは圧縮ファイル内のデータとなることをよく理解して下さい)。アンドロイドのアプリは作成した後に署名され、その内容が書き換えられるとセキュリティ上の問題が発生しているとみなされます。したがって、アプリ内においたファイルを書き換えて動くようなプログラムは作れないと考えたほうが良いでしょう。
お礼
sqliteの固定データベースを読み込みたいので・・ 今回の件に関しましてはreadonlyで大丈夫です。 お忙しい中お返事をいただき、ありがとうございました。
お礼
お礼が遅くなってしまい大変申し訳がありません。。 おっしゃっていただいた意味が分かりました。 リソースなのですね・・。 今はInputStreamでcsvファイル(というかリソース)を取り込み アプリ内でsqliteテーブルを作成してデータを流し込む方法をしております。。 分かりやすいご説明をいただき、ありがとうございました。