更改onUpgrade中的表

时间:2013-06-30 16:32:16

标签: android android-sqlite

我的onUpgrade功能遇到了一个小问题。 守则如下:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if(oldVersion<2){
        db.rawQuery("ALTER TABLE "+this.getTableName()+" ADD COLUMN "+COLUMNS.TIME+ " integer default 0;", null);
        db.rawQuery("ALTER TABLE "+this.getTableName()+" ADD COLUMN "+COLUMNS.DATE+ " integer default 0;", null);
        db.rawQuery("UPDATE "+this.getTableName()+ " SET "+COLUMNS.TIME+ "="+COLUMNS.TIME_OLD+";", null);
        db.rawQuery("UPDATE "+this.getTableName()+ " SET "+COLUMNS.DATE+ "="+COLUMNS.DATE_OLD+";", null);
    }
};

onUpgrade函数显然是正确的,因为我收到了错误:

  

没有这样的列:_timenew(代码1):,编译时:UPDATE TABLE_SCORE_NORMAL SET _timenew = _time;

我想知道为什么会这样。如果我在控制台上手动尝试,它可以很好地工作。

提前致谢。

2 个答案:

答案 0 :(得分:1)

rawQuery()编译SQL但不运行它。您需要在返回的moveTo...()上调用其中一个Cursor方法来运行已编译的SQL。

execSql()编译并运行SQL。

答案 1 :(得分:0)

在ALTER和UPDATE之间插入:

db.setTransactionSuccessful();
db.endTransaction();
db.beginTransaction();