2011-07-01 46 views
0

私はアンドロイドシステムでsqliteデータベースを扱う方法をゆっくりとしていますが、確かに学んでいます。情報を使用して私はここが見つかりました:私は、への負荷のものを作成して、私のAndroidのシステム上のデータベースから情報を取得する方法を学びましたsqlliteデータベースをアンドロイドで開いたままにしておくと悪い考えですか?

http://mfarhan133.wordpress.com/2010/10/24/database-crud-tutorial-for-android/

。結びの一つはここに、この方法であった:

public Cursor getClientsCursor() { 
     StudioTabOpenHelper dbAdapter=StudioTabOpenHelper.getDBAdapterInstance(this.getListView().getContext()); 
     try { 

      dbAdapter.createDatabase(); 
     } catch (IOException e) { 
      Log.i("*** select ",e.getMessage()); 
     } 
     dbAdapter.openDataBase();  
     String query="SELECT * FROM CLIENTS;"; 
     Cursor c = dbAdapter.selectRecordsFromDB(query, null); 
     //dbAdapter.close(); 
     return c; 
    } 

問題は、上記のコードは、私が開いていたアダプターを閉じたということでした...これは私がオンラインでCONN#返されたカーソルが、そのデータベースを訴えるためにすることを使わ一部を引き起こしていました0は既に閉じられています。だから、私はそのdbAdapter.close()をコメントアウトした。私はこのメソッドをもう一度呼び出すと、これは将来悪いと思う。

私の質問は、アプリケーションの開始時にdbAdapterを作成し、データベースを開いて開いたままにして閉じないといいですか? (私がこのルートに行くならば、dbAdapterをアクティビティやフラグメントなどに渡すにはどうしたらいいですか?)または、getClientsCursorメソッドをそのまま使用して、カーソルを戻して、メソッドを呼び出すことができます。閉じる()?

/** 
* Open the database 
* @throws SQLException 
*/ 
public void openDataBase() throws SQLException { 
    String myPath = DB_PATH + DATABASE_NAME; 
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 
} 


    /** 
* Close the database if exist 
*/ 
@Override 
public synchronized void close() { 
    if (myDataBase != null) 
     myDataBase.close(); 
    super.close(); 
} 

マイアダプタのコードは、ここから得た:

http://mfarhan133.wordpress.com/2010/10/24/database-crud-tutorial-for-android/

私はちょうど私のクラスDBAdapterを呼び出していませんでしたが、StudioTabOpenHelperそれを呼ばれます。

答えて

1

あなたのアクティビティの方法は onDestroy()で終了することがあります。

+0

私は開いて、活動の生活のためのアダプタを開いたままに聞こえます。今私もアンドロイド3.0を使用しているので、私の活動の多くはフラグメントを生成します。それらのフラグメントでは、アダプタの使用が本当に気になります。私の活動でアダプタを開くと、どうすれば私の断片からそれを得ることができますか? – Codejoy

関連する問題