Использование базы данных SQLiteOpenHelper.getWritableDatabase

#android #design-patterns

#Android #шаблоны проектирования

Вопрос:

Согласно http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#getWritableDatabase()

После успешного открытия база данных кэшируется, поэтому вы можете вызывать этот метод каждый раз, когда вам нужно выполнить запись в базу данных.

Рассмотрим следующий фрагмент:

 SQLiteDatabase db1 = openHelperImplObj.getWritableDatabase();
// do something with db1
SQLiteDatabase db2 = openHelperImplObj.getWritableDatabase();
// do something with db2
db2.close();
// do something with db1
db1.close();
  

Я полагаю, что второй вызов getWritableDatabase() вернет ту же кэшированную базу данных (db1), не вызовет ли строка db2.close() каких-либо проблем с операциями db1, которые произойдут позже? Если да, то каков рекомендуемый способ избежать такой проблемы, поскольку второй вызов может произойти где угодно, то есть в другой функции или даже в другом классе.

Комментарии:

1. Если подумать, я думаю, мне нужно просто избегать прямого использования / ссылки на SQLiteDatabase везде в моем коде, но разрешать только минимальное количество назначенных классов для выполнения заданий, связанных непосредственно с SQLiteDatabase. Это звучит не как вопрос, специфичный для Android, а скорее как общая проблема проектирования.

Ответ №1:

Когда вы открываете базу данных с помощью db openHelperImplObj.getWritableDatabase(); , проверьте следующее

1> Если база данных не создана, она создает базу данных и открывает ее для режима записи, который сначала создается, а затем открывается.

2> Второе и самое важное, что я заметил, если база данных уже создана, то она ее открыла, но если она уже открыта, она ничего не делает, That means it occupy the old instance of data база этой открытой базы данных уже до тех пор, пока вы ее не закроете.Вот почему лучше закрывать базу данных после ее использования

Надеюсь, вы получили