2012-11-09 19 views
6

我有一個應用程序與兩個活動。它是如何工作的SQLiteOpenHelper上下文

其中一個列出了幾個值,而另一個值則將新值添加到數據庫。

我有一個類至極從SQLiteOpenHelper延伸,並管理數據庫連接,查詢等

現在,我明白,在SQLiteOpenHelper的構造函數,你必須通過它來確定它是否有一個上下文創建一個新的數據庫或打開一個現有的數據庫。

但是,如果我在每個活動中都有一個SQLiteOpenHelper類的實例,那麼上下文會有所不同。

有沒有辦法避免這種情況?

謝謝。

回答

5

傳入應用程序上下文(.getApplication())而不是活動。這樣,兩個實例將使用相同的上下文訪問數據庫。

2

Context可能會有所不同,但不會創建不同的數據庫。 SQLiteOpenHelper constructor有一個name參數,這是數據庫文件名。如果這存在將不會創建,不管Context通過。

+0

上下文是用於訪問系統資源的接口。正如sabadow所提到的,哪個數據庫是由名稱決定的。 –

1

實際上,創建的數據庫是與上下文的應用程序包相關聯。因此,您是否已經傳遞了應用程序上下文或活動上下文並不重要。

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); 
相關問題