2012-02-03 12 views
6
の両方に.close()を呼び出す必要があり
SQLiteOpenHelper dbOpenHelper = new (ctx, nameofdb); 
SQLiteDatabase db = dbOpener.getWritableDatabase(); 

私はこれらの両方に.close()を呼び出す必要がありますか、またはちょうどそれらの1で十分ですか?はいの場合は、どちらですか?は私がSQLiteDatabaseとSQLiteOpenHelper

SQLiteDatabase 
SQLiteOpenHelper 

私が午前問題は、私はEclipseのDDMSビューにある特定の行が表示されないということですが、私はそれを得るためにカーソルを使用する場合、それは私がそのエントリを持っていないことを示しています。だから私はそれが正しくデータベースを閉じないことによって引き起こされるかもしれないのだろうか?助けることができる人は誰でも素晴らしいだろう。ありがとう!

答えて

5

あなたがSQLiteOpenHelper.close()のためにドキュメントを見てみると...

公共同期無効近い()

は、開いているすべてのデータベースオブジェクトを閉じます。

SQLiteOpenHelperを閉じないで、データベースを閉じます。

さらに、コードを正しく取得すれば、データベースオブジェクトを直接扱うことを避けることができます。

たとえば、アダプターがビューを取り込むためのカーソルを取得するために定期的に使用する照会がある場合は、SQLiteOpenHelperクラスにメソッドを作成し、その中に照会を入れます。

つまり、メインコード内の実際のデータベースへの参照を取得しないでください。SQLiteOpenHelperですべてを処理してください。

+1

[単一責任の原則](http://en.wikipedia.org/wiki/Single_responsibility_principle)についてはどうですか?私は 'SQLiteOpenHelper'クラスがデータベースを開く(作成する/更新する)ために[ヘルプ]のみを使用していると考えました。 –

+0

@ LeonidSemyonov:単にクラスを拡張し、機能(新しいメソッドや実装インターフェース)を追加することで、余分な責任が追加されると主張することもできますが、OOD/OOPの基本原則です。 Androidでは、それ自体が 'SQLiteOpenHelper'を維持するジェネリックDBのヘルパークラスを作成することは珍しいことではありません。私の主張は、特定のケースでは、 'SQLiteOpenHelper'を拡張して、別のDB 'ヘルパー' POJOを持たずに、DBの 'ヘルパー'メソッドの* ALL *を提供することができます。 – Squonk

+0

@Squonkは「開いているデータベースオブジェクトを閉じる」とは、アプリケーションで開いているすべてのSqliteDatabaseインスタンスを閉じることを意味します(複数の開いていると仮定して)か、現在のSqliteOpenHelperオブジェクトに関連付けられているインスタンスのみを閉じますか? – aandis

関連する問題