我想通过向我的android应用程序的Sqlite表中添加一列来升级某个表。我在DBHelper的onUpgrade方法中添加了一个alter table语句。Android onUpgrade每次都会被调用
以下是我看到的问题 我将数据库版本的值从1更改为2,所以最好现在onUpgrade应该被调用。它确实被调用,但每次实例化类时都会调用它。结果我得到一个列已经存在错误。
这里是onUpgrade方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
Log.d("old Version",oldVersion+"");
Log.d("New Version",newVersion+"");
db.beginTransaction();
try
{
String DATABASE_UPGRADE;
DATABASE_UPGRADE="alter table "+DATABASE_TABLE_MESSAGES+" ADD COLUMN "+ IS_READ+ " integer DEFAULT 0;";
db.execSQL(DATABASE_UPGRADE);
Log.d("upgrade", "Successful");
db.setTransactionSuccessful();
}
finally
{
db.endTransaction();
}
}
}
我很奇怪,为什么onUpgrade被每次叫!
我不知道,但我愿意打赌,版本没有正确更新数据库(我不明白为什么)。要检查数据库的版本,可以使用'db.getVersion()'。 – dmon 2011-05-27 14:46:53
onUpgrade方法中有2条log.d语句,它们分别显示1和2的值。因此数据库版本为1.我可能需要删除数据库并重试... – Rupin 2011-05-27 14:57:45