2013-06-30 26 views
1

我的onUpgrade函數出現了一個小問題。 的代碼如下:改變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功能顯然是所謂正確的,因爲我得到的錯誤:

no such column: _timenew (code 1): , while compiling: UPDATE TABLE_SCORE_NORMAL SET _timenew=_time;

我不知道爲什麼是這樣。如果我在控制檯上手動嘗試此功能,它可以完美工作。

在此先感謝。

+1

我不知道這是否是問題,但如果該語句不是查詢,您應該調用'execSql()'而不是'rawQuery()' –

+0

謝謝,修復它。奇怪的是,它並沒有在ALTER上出現問題。 – LeDon

回答

1

rawQuery()編譯SQL,但不運行它。您需要調用返回的Cursor上的moveTo...()方法之一來運行編譯的SQL。

execSql()都編譯並運行SQL。

0

ALTER和UPDATE之間插入:

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