使用onUpgrade()更新预先填充的SQLite数据库

时间:2014-07-06 21:59:49

标签: java android database sqlite

我一直在努力升级我预先填充的SQLite数据库,并且无法确定如何让onUpgrade工作。请在下面看我的代码,以便在整个数据库中进行复制。

// MAIN MENU ON GAME LOAD UP
DB_PATH = getDatabasePath(DataBaseHelper.DB_NAME).toString();
DataBaseHelper myDbHelper = new DataBaseHelper(this);
myDbHelper = new DataBaseHelper(this);
try
{
    myDbHelper.createDataBase();
}
catch (IOException ioe)     
{
    throw new Error("Unable to create database");
}
myDbHelper.close();

// HELPER CLASS
public class DataBaseHelper extends SQLiteOpenHelper 
{
    private static final int DATABASE_VERSION = 1;

    public DataBaseHelper(Context context) 
    {
        super(context, DB_NAME, null, DATABASE_VERSION);
        this.myContext = context;
    }

    public void createDataBase() throws IOException
    {
        boolean dbExist = databaseExist();
        if(dbExist)
        {
            //database already exist
        }
        else
        {
            try 
            {
                copyDataBase();
            } 
            catch (IOException e) 
            {
                throw new Error("Error copying database");
            }
        }
    }

    @Override
    public void onCreate(SQLiteDatabase db) {}

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
        switch (oldVersion)
        {
            case 1:
                db.execSQL("UPDATE MazeOnDraw SET posX=1, posY=2 WHERE rowid=5");
                break;
        }
    }
}

所以我不确定我在这里做错了什么然而onUpgrade似乎永远不会被调用,我正在增加数据库版本。此外,这个过程可以使用多个数据库,因为我可能有2个不同的数据库(尽管如果需要可以将其压缩为1个)。

最后,可以通过ecplise调试来测试onUpgrade进程,还是必须通过开发人员控制台上的alpha版本进行测试。

1 个答案:

答案 0 :(得分:0)

请将DB_vERSION值chagne为2 ..所以DDMS可以识别app有更新版本的databasee进行升级..

更改

private static final int DATABASE_VERSION = 2;

super(context, DB_NAME, null, DATABASE_VERSION );

在此声明中,最后一个参数是数据库版本.. 将其设置为2 以获取新更新的APK。所以现有用户可以新添加表或列。

更新后的apk onUpgrade会调用。在那里你可以从资产中复制数据库。但是现有用户将丢失数据..所以最好的选择是在数据库中动态添加表。

参考此answer