Как это работает контекст SQLiteOpenHelper

У меня есть приложение с двумя видами деятельности.

один из них перечисляет несколько значений, а другой добавляет новые значения в БД.

У меня есть класс, который простирается от SQLiteOpenHelper и управляет соединениями БД, запросами и т. д.

теперь я понимаю, что в конструкторе SQLiteOpenHelper вы должны передать контекст, который используется для определения, должен ли он создать новую БД или открыть существующую.

но если у меня есть один экземпляр SQLiteOpenHelper класс в каждом действии, то контекст будет отличаться.

есть ли способ избежать этого?

спасибо.

3 ответов


Pass в контексте приложения, (.getApplication ()) вместо действия. Таким образом, оба экземпляра получат доступ к БД, используя один и тот же контекст.


на Context может отличаться, но не создавать разные БД. The конструктор SQLiteOpenHelper есть name параметр, это имя файла БД. Если это существует, не будет создавать независимо от Context прошло.


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

контексте.java

/**
 * Open a new private SQLiteDatabase associated with this Context's
 * application package.  Create the database file if it doesn't exist.
 ...
 ...
 */
public abstract SQLiteDatabase openOrCreateDatabase(String name,
        int mode, CursorFactory factory);