0

メッセージング アプリからのログ情報を保持する SQLite データベースを試しています。

私はSQLiteOpenHelperを使用しており、以下を使用してルート化されていないデバイスのSDカードにdbを強制しています:

public LogDatabase(Context context, String dbname) {
  super(context, 
    Environment.getExternalStorageDirectory().getAbsolutePath() + 
      "/" + dbname, null, 3);
}

これは正常に機能しているように見えます。データベースは適切に拡張され、アプリは書き込み時に例外をスローしません。

デバイスを USB マウントし、外部アプリ (たとえば、Ubuntu コマンド ラインからの sqlite3) からデータベースを開こうとすると、問題が発生します。エラーは常に同じです:「エラー: ファイルが暗号化されているか、データベースではありません」。

Android での SQLite の扱いについて何か気になる点はありますか? または、データベースの管理方法について根本的に壊れているものを見逃していますか?

編集: 問題の元のデバイスは、v2.3.5 を実行している HTC Desire S です。

編集: 別のデバイス (v2.3.4 を実行している Motorola ET1) でテストを再実行しましたが、問題は発生しません。Ubuntu 経由でデバイスをマウントし、sqlite3 コマンド ライン経由で自由にデータベースを参照できます。

4

1 に答える 1

0

わかりました、私は答えを見つけたようです。ベンダー固有である可能性があると疑った後、次のスタックの質問を見つけました。

HTC Desire HD での Sqlite の問題

これは、HTC がデバイスで先行書き込みログ (WAL) を有効にした可能性があることを示唆しています。

それが本当だと仮定すると、私は SQLite のごく最近のビルドをプルして v3.7.14 をビルドしました。幸いにも、問題のデータベースを正常に開くことができます。これは、できなかった SQLite の v3.6.22 とは対照的です。

于 2012-08-15T14:24:08.107 に答える