0

sqlite データベースを使用してアプリケーションを動作させるのに多くの問題がありました。すべてがリップルで問題なく動作します (これは、chrome の sqlite 実装を使用しているためだと思います)。ただし、シミュレーター (Curve 9300、OS 6) でアプリを実行すると、問題が発生します。アプリを実行し、データベースを作成し、行を挿入できる場所にたどり着いたので、実際のクエリに問題がないことがわかりました。

私のアプリケーションには、データベースを操作するためのラッパーを含む JavaScript ファイルがあります。この JavaScript ファイルは、リスナーと、アプリケーションのコアであるページの両方で供給されます。問題は次のとおりです。

  1. アプリケーションをインストールします。リスナーが実行を開始します。
  2. あるシミュレーターから別のシミュレーターにテキスト メッセージを送信します。メッセージが正常に保存されました (バナー インジケーターの数が増え、その数がクエリに基づいているため、これを確認できます)
  3. テキストを送信し続けると、バナー インジケーターが増加します。
  4. アプリケーションを開き、すべてのメッセージを読みます。この時点で、javascript ファイルが 2 回読み込まれるため、2 つの db オブジェクトが同じデータベースを指しています。
  5. アプリケーションを閉じます (リスナーはまだ実行中です)
  6. 次に受信したテキスト メッセージによって実行時例外が発生しますが、詳細は提供されません。

スタック トレースを確認したところ、SMS リスナーのコールバックで例外が発生したことがわかりました。クエリが発生する場所であるため、これは明らかです。データベースへの2番目の接続を開くと例外が発生する理由を知っている人はいますか? 私が理解している限り、データベースはトランザクション中にのみロックされます。新しい行を挿入しようとしているトランザクション以外に、実行中のトランザクションはまったくありません。私は JavaScript を初めて使用しますが、JavaScript ファイルが 2 つの異なるページに読み込まれるため、変数が共有されていないことは確かです。どんなアイデアでも大歓迎です。

4

1 に答える 1

0

さて、私は解決策を見つけることができませんでした。blackberrysqliteの実装で2つの同時接続を処理できるとは思いません。代わりに、リスナーは受信データをファイルに保存するようになりました。メインアプリケーションが開いたときにファイルが読み込まれ、必要なすべてのデータがデータベースに保存されます。その後、ファイルは削除され、アプリケーションは問題なくクエリを実行します。これが同様の問題を扱っている人に役立つことを願っています。

于 2012-01-17T20:31:57.293 に答える