2016-05-09 65 views
-1

有人請幫助我正確使用sqliteopenhelper類中的onUpgrade()。提前感謝。sqlite中onUpgrade()的用法是什麼?

+1

檢查此鏈接希望它會幫助你http://developer.android.com/intl/ru/reference/android/database/sqlite/SQLiteOpenHelper.html#onUpgrade(android.database.sqlite.SQLiteDatabase,int,int ) –

+0

使用'onUpgrade()'時你遇到的具體問題是什麼? – laalto

+0

其實我有一個家庭自動化應用程序,它有許多設備保存在本地數據庫。我懷疑如果由開發人員進行更新,它如何反映在我的本地數據庫中。如果所有表都被替換,我將丟失所有數據。無論如何要備份它嗎?請幫助我。 –

回答

0

在Sqliteopenhelper中定義數據庫版本。如果你改變你的數據庫版本onUpgrade()將被執行。它是onCreate()的對應部分

在onUpgrade中,您將刪除舊錶並生成新表。

有一個小例子:

public class BaseDatabaseHandler extends SQLiteOpenHelper { 

    /******************************************************** 
    * Database 
    ********************************************************/ 
    private static final int DATABASE_VERSION = 4; 
    private static final String DATABASE_NAME = "test.db"; 


    /******************************************************** 
    * Table names 
    ********************************************************/ 
    protected static final String TABLE_INPUT = "input"; 


    /******************************************************** 
    * Column names 
    ********************************************************/ 

    /* Input*/ 
    protected static final String COLUMN_ID = "id"; 
    protected static final String COLUMN_NAME = "name"; 


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

    @Override 
    public void onCreate(SQLiteDatabase db) { 


     String CREATE_INPUT_TABLE = 
       "CREATE TABLE " + TABLE_INPUT + " (" 
        + COLUMN_ID + " LONG PRIMARY KEY, " 
        + COLUMN_NAME + " TEXT, " 
        + ")"; 


     db.execSQL(CREATE_INPUT_TABLE); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_INPUT); 
     onCreate(db); 
    } 
} 
+0

親愛的Dteuchert,謝謝你的回覆。我的舊錶數據怎麼樣?如果我更新我的應用程序,它會丟失嗎?是否有備份我所有的數據。請解釋一下。 –

+0

嘿,是的,這些數據將會丟失。你可以編程一個函數,以某種方式存儲你的舊數據,並在'db.execSQL(「DROP TABLE IF EXISTS」+ TABLE_INPUT);' – DTeuchert

1

當您更改數據庫表元素或列的值,那麼你必須要更新數據,以反映這種變化。 其他方面不會發生這樣的表或其他類型的錯誤。 因此,如果您的應用程序已經上傳,那麼在更改數據庫之後,您必須更改數據庫版本並在onUpdate()方法中重新創建所有表。

相關問題