2011-07-05 11 views
3

私はデータベースのいくつかのファイルにアンドロイドで参加しようとしています。 2.3より前のアンドロイドバージョンではapk内のファイルのサイズが1MBに制限されていたため、ファイルが最初に分割されました。私が一緒に参加しようとしているファイルは、それを読むためにSQLiteのための右のフォルダに配置する独自の方法が複雑されているデータベースであり、そして私は次の方法使用しています:java(アンドロイド)を使用してデータベースの複数のファイルを結合すると、データベースが破損します

private void copyDB() throws IOException { 
     // list the files the db is splitted into 
     int[] cc = { R.raw.cc1, R.raw.cc2, R.raw.cc3 }; 
     OutputStream out = new FileOutputStream(DB_PATH+DB_NAME); 

     for (int k : cc) { 
      InputStream in = mContext.getResources().openRawResource(k); 
      int count; 
      byte[] filebytes = new byte[1024]; 
      while((count = in.read(filebytes)) != -1) 
       out.write(filebytes, 0, count); 
      in.close(); 
     } 

     // clean up 
     out.flush(); 
     out.close(); 
    } 

ようにあなたが見ることができます、私は一緒にファイルを結合するためにプレーンストリームを使用しています、そして、それはアンドロイド2.3と期待どおりに動作するため、それが動作することをほぼ肯定的です。しかし、私がアンドロイド2.2でテストすると、データベースが壊れています(LogCatの正確なメッセージはありませんが、SQLエラーは「エラー:データベースディスクイメージが不正です」)

/data/data/package.name/database/フォルダに置いたときにデータベースが壊れるのを防ぐために私ができることは何ですか? ありがとうございます。

+0

私は同じ問題に遭遇しました...あなたは解決策を考案しましたか? – pkramaric

答えて

1

これは厳密にはあなたの質問に対する回答ではありませんが、問題を解決する可能性があります。私はこの問題に遭遇したとき、ファイルを名前を変更してAndroidに非圧縮バイナリとして扱わせると信じています(拡張子は.mp3です)。

+0

私はそうし、効果的に、ファイルはもう圧縮されませんでした(サイズは非常に異なっていました)。しかし、ファイルをデータベースフォルダに移動した後、破損したデータベースについて同じエラーが発生しました。たぶん、アンドロイドはファイル上に何らかの種類のメタデータを書きます。そのため、sqliteによって破損が検出されます。 – omtinez

1

私は同じ問題を抱えていましたが、それが私のdbを間違って分割していたことに気付きました。もともと私はこれを分割しました。

iは、従って第二のlargefileの端部での.dbを忘れたlargeFile.db -b 1Mのlargefile

を分割し、

を解決largeFile.db -b 1M largeFile.db

を分割しました私の問題。私は、多分これが

に役立ちます...

を(私は生のあなたの場合は、同様に動作するとし)資産に...、フォルダをすべて私largeFile.dbaa、largeFile.dbabを移動しlargeFileA、largeFileB、それらを名前を変更しました

+0

魅力のように働いた、ありがとう:) – yuttadhammo

関連する問題