2013-10-06 49 views
0

我有一個應用程序,我在工作,我不知道當我關閉我的應用程序並重新啓動它時,我的數據庫會發生什麼,因爲我從未指定onPause,onResume和onDestroy發生了什麼(因爲我不知道在那裏指定什麼) 。每次啓動應用程序時,是否都會重新創建SQLite數據庫?

這裏是我的DBTools類

public class DBTools extends SQLiteOpenHelper { 

    public DBTools(Context applicationcontext) { 
     super(applicationcontext, "rggarb.db", null, 1); 
    } 

    public void onCreate(SQLiteDatabase database) { 

     String tableUsers = "CREATE TABLE users (userId INTEGER PRIMARY KEY, userName TEXT, userEmail TEXT, userPassword TEXT, userAvatar TEXT, userSex TEXT)"; 
     database.execSQL(tableUsers); 

    } 

    public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) { 
     String dropTableUsers = "DROP TABLE IF EXISTS tableUsers"; 
     database.execSQL(dropTableUsers); 
     onCreate(database); 
    } 
      //some CRUD methods here, irrelevant for this question 

} 

,這裏是我如何與它

在MainActivity

操作:

public class MainActivity extends Activity { 
    DBTools dbTools = new DBTools(this); 

然後用戶去註冊活動,而且有:

public class Signup extends Activity {

private DBTools dbTools = new DBTools(this); 
    //later on in this class I do some checks and inserts. 

我懷疑有些東西可能是錯的,我不熟悉數據庫的生命週期,我使用它的方式。它在每個onDestroy上都是空白的嗎?每次都需要在MainActivity中實例化它嗎?如果我在那裏實例化了,是否需要在註冊活動中再次安裝它?

回答

2

據我所知,沒有。應用程序創建數據庫後,該數據庫將被保存,並且數據會通過應用程序關閉和其他生命週期活動持續存在。

如果以編程方式插入/創建數據庫條目,則只需執行一次。否則,你會有重複的數據。

除非你編寫代碼銷燬數據庫然後否,數據庫將在那裏。

因此,要回答你的問題..

Does it go blank on each onDestroy?

沒有,一旦你插入的條目,他們將永遠存在。否則,不推薦SQLite用於數據持久性。

Do I need to instantiate it in MainActivity every time?

我通常在我的活動我創建數據庫助手的全局實例,所以如果我需要運行一個查詢時,我就稱之爲實例做查詢。

If I have instantiated it there, do I need to instatiate it yet again in Signup Activity?

你真的不一遍,因爲一旦你創建「實例」的數據庫,它在你的應用程序。在你的註冊活動中創建一個你的db helper的實例只會啓用該活動來運行查詢。

+0

取決於您的實現,並且如果我重新安裝應用程序,那麼DB走了,對不對? –

+0

是的。重新安裝應用程序將擦除數據庫數據。 – Razgriz

+0

如果我已經在MainActivity中實例化它,我需要在Signup Activity中再次安裝它嗎? –

2

只有在數據庫版本更改(在超級構造函數調用中傳遞)或卸載應用程序時纔會重新創建數據庫。

如果DB版本發生變化,影響是onUpgrade()

相關問題