оставить базу данных sqllite открытой на андроиде, плохая идея? - PullRequest
0 голосов
/ 01 июля 2011

Я учился (медленно, но верно), как работать с базами данных sqlite в системах Android.Используя информацию, которую я нашел здесь:

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

Я научился создавать, загружать вещи и получать информацию из базы данных на моей системе 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;
    }

Проблема заключалась в том, что приведенный выше код закрывал адаптер, который я открыл ... Это приводило к тому, что часть, в которой я использовал этот возвращаемый курсор, жаловалась на эту базу данных.Конн # 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 Ответ

1 голос
/ 01 июля 2011

Вы можете закрыть свой адаптер на onDestroy() метод вашей деятельности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...