0

同じ暗号化キーを使用してデータベースを open() することができ、正常に動作します。複数の暗号化されたデータベースで試してみました - すべて開くことはできますが、接続することはできません。

これは、暗号化されている場合と暗号化されていない場合 (bytearray が null) で機能します。

connection.open(file, "create", false, 1024, bytearray);

これは、暗号化されていない場合にのみ機能します。

connection.attach("db" + newnum.toString(), file, new Responder(attachEncryptedSuccess, openEncryptedError), bytearray);

どんな助けでも大歓迎です。

アップデート:

ここで奇妙なパターンを見つけました:

暗号化されたデータベースを作成してから、新しいデータベースを作成して接続すると、すべて正常に動作するようです。

作成されたファイルは、アンロード後に、最初に作成されたコマンドを使用してのみ適切に開かれます。したがって、open() を使用する前に作成した暗号化されたデータベースは、open() メソッドでのみ開くことができます。attach() を使用して最初に作成されたすべての暗号化されたデータベースは、attach() を使用してのみ開くことができます。また、どちらのデータベースが最初に open() されたか、つまりどちらがメイン データベースであるかは問題ではありません。暗号化されていないことさえあります。

これは非常に奇妙なことです。これはバグですか?それとも、ここで何か間違ったことをしていますか?

4

1 に答える 1

0

少し前に出くわした落とし穴がありますが、それはあなたに影響を与えているようです。AIRから両方のデータベースを作成している場合、これは正常に機能するはずですが、外部ツールを使用して作成した場合、通常、ほとんどのツールはデフォルトでPRAGMA ENCODING = UTF8。アドビであるAIRは、UTF16-LEを作成していることをまっすぐに伝えるのとは少し異なります。

sqliteのルールによれば、異なるエンコーディングタイプをいずれかの方法でアタッチすることはできません。確認する1つの方法は、sqlitemanまたはその他のsqliteエディターを使用してプラグマ設定を確認することです。

私の場合、テンプレートデータベースから初期化されるシードされたデータベース(空のデータベース-ヘッダーのみ-はAIRによって上書きされました)から開始する必要がありました。AIRに開始データベースの作成を許可した場合、UTF8テンプレートをアタッチできないUTF16に設定されていました。

于 2012-06-13T17:43:18.477 に答える