2016-05-09 39 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()方法中重新创建所有表。

相关问题