2012-10-31 105 views
0

我有一個擴展SQLiteOpenHelper的類。重載的兩個函數是SQLiteOpenHelper更新數據庫中的表格

@Override 
    public void onCreate(SQLiteDatabase database) { 
     database.execSQL(DATABASE_CREATE); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase dataBase, int oldVersion, 
      int newVersion) { 

    } 

在OnCreate函數中,我添加了SQL腳本來創建表。現在,如果我想升級數據庫中的表,該怎麼辦。

何時調用onUpgrade函數?

什麼是oldVersion和newVersion的int值?

這些是否允許我在我的數據庫上創建版本?

就像在版本2我想添加一個新表,並在版本3我想添加一個新的列到現有的數據庫表?

我該怎麼做?

每次創建類的對象時,都會調用onCreate函數,或者只有在安裝應用程序時Android才調用它。

回答

0

我給你一個修剪,在這裏我設置數據庫版本爲1.如果我需要升級所有數據庫,我會使它2或其他東西和SQLiteOpenHelper會知道這是一個新版本的數據庫,並且調用onUpgrade方法...

private final int DATABASE_VERSION = 1; 
private final String DATABASE_NAME = "yourDatabase"; 

private class DBOpenHelper extends SQLiteOpenHelper { 

    public DBOpenHelper(Context context) { 
     super(ctx, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(CREATE_TABLE_SIGNIN_FIRST); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // you can drop table and re create it here. 
    } 

} 
+0

老版本和新版本會如何發揮作用? – user1730789

1

什麼oldVersionnewVersion INT值?

這些用於版本化您的數據庫。數據庫版本在SQLiteOpenHelper的構造函數中傳遞。

什麼時候調用onUpgrade函數?

onUpgrade被稱爲當你newVersion>oldVersion

做這些讓我創造我的分貝一個版本?

是這些值允許您爲數據庫版本。

就像在版本2我想添加一個新表,並在版本3我想 添加一個新的列到現有的數據庫表?

onUpgrade方法中執行CREATE TABLE查詢,該查詢將在您的數據庫中創建一個新表。同樣,如果您想添加新列,請使用ALTER TABLE語句。

的的onCreate函數將每個時刻i創建的 一個對象的類,或將Android調用此應用程序安裝 僅當被調用?如果你的應用程序沒有創建一個數據庫呢,

OnCreate被稱爲像的情況 - 你是啓動您的應用是第一次,清除其數據後運行的第一次應用。

+0

因此,在構造函數中傳遞的版本是newVersion,並且在onUpdate版本被調用之後,這變成了oldVersion? @Ragunath Jawahar。 – user1730789

+0

準確地說,它變成了當前版本。在下一次更新中,如果你增加你的DB_VERSION,那麼它就變成了舊版本。 –