0

Android アプリで SQLite db を使用しようとしています。以前は機能していましたが (何も変更していないことを誓います)、明らかに何かが変更されました。これは、db のクエリ時にコードが何も返さなくなったためです。コード自体をステップ実行すると、DBHelperthis.getReadableDatabase()がデータベースを呼び出すとすぐmStackTraceに、アプリ自体でデータベースを開いたのは初めてであるにもかかわらず、DatabaseObjectNotClosedException が発生することに気付きました。不思議なことに、このエラーが実際にスローされることはなく、私の問題でさえないかもしれませんが、ここから始めるのが良いと思います。

コード:
{中略}

ここで何が起こっているのか、私は 100% ではありません。このクラスはデータベースを res/assets からローカル データ フォルダーにコピーすることになっており、動作しているように見えますが、行が返されないため、データベースが正しくないか、間違ったものを指すことになります。考え?

編集:追加の更新。ファイルを保存している data/ dir を調べたところ、 に 1 つと に 1 つの 2 つの別個のデータベースが見つかりましfiles/databases/files/すべてのデータがそのままの正しいDBがあり、databases/Android用の空のデータベース設定です。私のコードは でデータベースを呼び出すことになっていますがfiles/、そうではないのでしょうか?

編集:解決しました。問題が見つかりましたが、DBhelper とは何の関係もありませんでした。どうやら、プロジェクトの私の同僚が、テスト用にすべきではないフィールドを編集し、元に戻すのを忘れていたようです。私が行っていたSQL呼び出しに問題があることが判明しました。助けてくれてありがとう!

4

2 に答える 2

1

SQLiteOpenHelperこのブログ投稿で説明されているように、のインスタンスを 1 つだけ操作するようにしてください。問題は、クラスの複数のインスタンスを誤って作成し、そのうちの 1 つを閉じるのを忘れたことだと思います。また、Sam の提案に従って、作成したインスタンスを慎重に閉じるSQLiteOpenHelperこともできます。ただし、私の意見ではSQLiteOpenHelper、アプリケーションのライフサイクル全体で同じものを使用する方がはるかにクリーンです。

于 2012-10-09T22:17:43.760 に答える
0

編集:解決しました。問題が見つかりましたが、DBhelper とは何の関係もありませんでした。どうやら、プロジェクトの私の同僚が、テスト用にすべきではないフィールドを編集し、元に戻すのを忘れていたようです。私が行っていたSQL呼び出しに問題があることが判明しました。助けてくれてありがとう!

于 2012-10-29T16:49:18.413 に答える