我一直在努力升级我预先填充的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版本进行测试。
答案 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