2

「ルート」のない電話からデータベースをパッドにコピーする必要があります。そのため、他の方法と同様に、最初に/data/data/../databases/test.dbを/sdcardにコピーします。次に、私のPCまたは友人のPCでadb shell sqlite3コマンドを実行すると、いくつかの質問があります:1)時々、正常に開くことができます2)時々、「ファイルは暗号化されているか、データベースではありません」と表示されます3)時々、「データベース ディスク イメージの形式が正しくありません」

注: sqlite3 のバージョンは異なります。

「ファイルが暗号化されているか、データベースではない」の根本的な原因はバージョンの問題ですか?

「データベースディスクイメージの形式が正しくありません」という根本的な原因は何ですか? インターネット上でいくつかの情報を検索しましたが、まだ修正できません。

ありがとう!

編集 1: テスト用の電話は HTC HD 編集 2: このスレッド: http://groups.google.com/group/android-developers/browse_thread/thread/2b8a8fa9b955eecd/0615c6111d93ea02?lnk=raotメッセージがあります:これを行わないよう強くお勧めします。バイナリ データベース ファイルが Android バージョン間で互換性があるという保証はなく、すべてのカスタム ROM 間で互換性があるという保証はありません。

「データベース ディスク イメージの形式が正しくありません」の根本的な原因は、Sqlite3 のバージョンにあるようです。しかし、データベースをSDカードにバックアップする方法が最善の方法ですか? 他の方法はありますか?

編集 3:リンク 1 リンク 2 リンク 3

4

1 に答える 1

0

私の本能は、転送中にデータベース ファイルが何らかの形で破損したと考えることです。私の経験から言えば、データベース ファイルが破損していれば、それで終わりです。

次のプラグマを使用して、ソースと宛先の両方でデータベース ファイルが破損していないことを確認する必要があります。

PRAGMA integrity_check; 

すべてが正常であれば、結果セットは値を持つ単一の列レコードになりますok

明確にするために、次の 3 つのシナリオのいずれかで、データベースがほとんど破損しており、使用できません。

  • sqlite3 はデータベース ファイルを開くことさえせず、何らかのエラーを返します。
  • sqlite3 はデータベース ファイルを開きますが、いくつかのステートメントを実行するとエラーが返されます。
  • sqlite3 はデータベース ファイルを開きますが、pragma integrity_check戻りませんok

ソースと宛先の両方が sqlite 3.xyz を使用しているように見えるため、ファイル形式は問題になりません(いくつかの例外がありますが、それらのいずれかが問題の原因であるとは思えません)。

おそらく実行したいもう 1 つのことは、ソースと宛先でファイルが同一であることを確認することです。それらのハッシュ (md5、sha1、またはその他) を比較できます。

于 2012-04-18T14:05:08.707 に答える