2011-01-17 11 views
1

私は完了した既存のiPhoneプロジェクトのポートであるAndroidプロジェクトを開始しています。Androidとかなり大きなSQLiteデータファイル

私は非常に大きな読み取り専用のSQLiteデータベースを持っています。これは約100Mbです。これは "mydata.sqlite"と呼ばれています。 Eclipseワークスペースにはどこに配置しますか? 「資産」には大きすぎます。

次に、ファイルを取得するにはどうすればよいですか?私のような何かしてみてください(後で例外を処理)すると思うだろう:

SQLiteDatabase myDatabase = null; 
myDatabase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 

をしかし、私はその後、パス文字列myPathが必要となり、私はこれをする必要があるかわからないリソースをどこに置くか私にはわからないので、さあ。

"res/raw"に "mydata.sqlite"を入れてもいいですか(Eclipseで "raw"を作成したら)、それを "R.raw.mydata"のリソースとして参照できますか?

チュートリアルを参照するのではなく、ここで直接助けていただければ幸いです。私はすでにstackoverflowでここに引用されているものを含め、これらのトンを確認しました。私はAndroidデベロッパーのドキュメントの "メモ帳"プロジェクトも行ってきました。ただし、これらのドキュメントおよびドキュメントでは、常に永続的ではない新しい、空の、または小さなデータベースのみが考慮されます。これは簡単なことであり、私がすでに過ごした時間を考えれば、おそらく簡単に聞くことができます。

ご協力いただきありがとうございます。

+0

市場からダウンロードしたアプリケーションに50メガバイトの上限は(私が思う)あります。なぜ大規模なデータベースが必要なのでしょうか? – Falmarri

+0

@Falmarri:私の理由はそれほど重要ではありませんが、データベースはアプリの不可欠な要素だと言えます。ファイルサイズの制限は、データベースを50MB以下に圧縮しても、まだ迷惑です。 (@SteDを参照してください) – SK9

+0

まあ、私は本当に電話で100MBのデータベースの正当な目的が表示されません。 – Falmarri

答えて

1

これまで私のアプリにこのような大きなDBを含めることはなかった。

mydata.sqliteの名前をmydata.jpgに変更すると、ファイルがアセットによって圧縮されないようにすることができます。このファイルは、アセットフォルダに入れてからアクセスできます。

MB 1上の非圧縮サイズを有する任意の圧縮されたアセットファイルはAPKから読み取ることができません。 [source]

編集:今、あなたの最善の策のように思える、必要なときに小さなチャンクオフウェブサーバーにデータを取得するのですか? thisが見つかりました。mjc147のソリューションをチェックしてください。GoogleのRomain Guyは1MBの制限について説明しています。

+0

あなたの投稿とリンクをありがとうございます。 (1)データベースは、アプリケーションの不可欠なコンポーネントです。 (2)アプリの一部として圧縮する必要があります(ダウンロードした場合には年齢がかかりません)。 (例えば、iPhoneアプリは約28Mbに圧縮され、さらに20Mbの3G制限の下で切断されます)私はAPKの制限が私にとって大きな障壁であるように思えます... ...? – SK9

+0

PS - Android用の大容量ファイルの管理に関する文書が(もしあれば)ほとんどない理由について、APKの制限についてのあなたの論点が少し浮き彫りになっています。 :) – SK9

+0

回答がありました、うれしく思います;) – SteD

1

あなたが.apkに100MBのアセットを入れている場合は、マーケットで公開するには大きすぎるアプリで終わることに注意してください。

+0

アプリケーションサイズの制限は50MBです – SK9

0

これは35MBのSQLiteデータベースで1回行いました。私がしたこと:

1.)私はTotalCommanderというWindowsツールを使って、* .dbファイルを1MBに分割しました。

2.)私はassetsフォルダに入れました。

3.)私のデータベースのヘルパークラスでは、最初の起動時にこれらの部分を一緒に移動しました。

これは完璧に機能し、十分速かった。

1について考えてください:

)ある時点では、起動時に内部ストレージに3 * 50MBがあるので、データベースにはSDカードを使用することを検討してください。あなたのデバイス上の4 *の50メガバイトを持っているアプリの更新の間に1点で

2)...

よろしく hjw

+0

あなたの投稿をありがとうございます。私はあなたが「3)...何を意味するのかよくわかりません...これらの作品を一緒に動かしました...」または(私が正しく理解していれば)なぜあなたはすべきか?非圧縮時に1MBを超えるファイルは、APKによって無視されます。あなたが手助けできる1つの質問:もし私がSQLiteデータベースを(例えば)5個に分割し、それらを一緒に持ってこないなら、これらのインデックスを付ける良い方法はありますか? [これらのインデックスを作成するために6番目のSQLiteデータベースがあると思っています...] – SK9

+0

1MBのファイルサイズの制限が、ファイルを複数に分割する理由でした。最初の起動時に、これらの部分を一緒にコピーして* .dbファイルを作成しました。この* .dbファイルは/ data/data//databasesに作成され、期待どおりに動作しました。あなたの質問に:デバイスに複数のデータベースを作成する必要はありませんでした。それはうまくいくかもしれない。 –

+0

OK、SQLiteを使用して/ assetsフォルダ内のいくつかの小さなデータベースを結合し、結果を/ databasesにダンプしました。結合されたデータベースは、1MBの制限よりも大きくなります。この制限は/データベースには適用されません。私はそこから全体を読むことができるのですか? – SK9

関連する問題