1

我的 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 (code 1): ,编译时: UPDATE TABLE_SCORE_NORMAL SET _timenew=_time;

我想知道为什么会这样。如果我在控制台上手动尝试它,它会完美运行。

提前致谢。

4

2 回答 2

1

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

execSql()都编译和运行 SQL。

于 2013-12-26T12:37:25.200 回答
0

在 ALTER 和 UPDATE 之间插入:

db.setTransactionSuccessful();
db.endTransaction();
db.beginTransaction();
于 2013-12-26T12:33:15.050 回答