2012-11-09 22 views
6

Mam aplikację z dwoma działaniami.Jak to działa Kontekst SQLiteOpenHelper

Jeden z nich wyświetla kilka wartości, a drugi dodaje nowe wartości do bazy danych.

Mam klasa wich rozciąga się od SQLiteOpenHelper i zarządza połączeniami DB, zapytań, itp

Teraz rozumiem, że w konstruktorze SQLiteOpenHelper trzeba przekazać kontekst, który jest używany do określenia, czy aby utworzyć nowy DB lub otworzyć istniejący.

Ale jeśli mam jedno wystąpienie klasy SQLiteOpenHelper w każdym działaniu, wówczas kontekst będzie inny.

Czy można tego uniknąć?

Dzięki.

Odpowiedz

5

Przepuścić w kontekście aplikacji (.getApplication()) zamiast działania. W ten sposób obie instancje będą uzyskiwać dostęp do bazy danych przy użyciu tego samego kontekstu.

2

Model Context może być inny, ale nie może tworzyć różnych DB. Parametr SQLiteOpenHelper constructor ma parametr name, który jest nazwą pliku DB. Jeśli to istnieje, nie zostanie utworzone niezależnie od przesłanego Context.

+0

Kontekst jest interfejsem dostępu do zasobów systemowych. Jak wspomniał sabadow, która baza danych jest określana przez nazwę. –

1

W rzeczywistości utworzona baza danych to związana z pakietem aplikacji kontekstu. Nie ma więc znaczenia, czy przeszedłeś kontekst Kontekst aplikacji, czy kontekst aktywności.

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);