2014-08-29 23 views
1

你能幫我嗎? 我想在應用程序中升級我的數據庫。 我需要按名稱「警報」創建新列。 我怎麼能在onUpgrade()方法中做到這一點? 在谷歌我沒有找到需要的信息。 以及如何與舊數據庫中的信息保存到新的數據庫我如何在Android上升級我的數據庫

我的代碼:

public static final String DB_NAME = "database.db"; 
public static final int DB_VESION = 1; 
public static final String ID_COLUMN = "_id"; 
public static final String NOTE_COLUMN = "note"; 
public static final String DATE_COLUMN = "date_create"; 
public static final String STATE_COLUMN = "state"; 
public static final String DAY_STATE_COLUMN = "day_state"; 
public static final String ALARM_COLUMN = "alarm"; 
public final String[] allColumns = {ID_COLUMN, DATE_COLUMN, NOTE_COLUMN, STATE_COLUMN, DAY_STATE_COLUMN}; 
public static final String TABLE_NAME = "notes"; 

@Override 
public void onCreate(SQLiteDatabase db) { 
final String CREATE_DB = "CREATE TABLE " + TABLE_NAME + " (" + 
ID_COLUMN + " INTEGER PRIMARY KEY AUTOINCREMENT," + 
DATE_COLUMN + " LONG NOT NULL," + 
NOTE_COLUMN + " VARCHAR(140) NOT NULL," + 
STATE_COLUMN + " INTEGER NOT NULL," + 
DAY_STATE_COLUMN + " LONG" + 
");"; 
db.execSQL(CREATE_DB); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
//how i can do this???? 
onCreate(db); 
} 

在此先感謝

回答

0

我的猜測是你正在擴展SQLiteOpenHelper類,以便能夠管理你的數據庫。

如果是這樣,構造函數的最後一個參數是DB_VERSION。您應該增加該數字,以便onUpgrade get被調用。但請注意,每次更改DB_VERSION時,都會調用onUpgrade方法,因此我建議您使用交換機來標識您需要執行的每個數據庫升級。否則,你可能會發現自己試圖添加一個已經存在的列。

如果你正在尋找的代碼添加一列,嘗試這樣的事情:

字符串createAlarmColum = 「ALTER TABLE添加註釋COLUMN報警INT;」;
db.execSQL(createAlarmColum);

希望它能幫助:)

1

既然你已經選擇了刪除並重新創建表,只需添加新色譜柱規格到您的onCreate()中的CREATE TABLE

增加你的DB_VESION,這樣onUpgrade()被調用。

0

的方法onUpgrade可能是這樣的代碼?

@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { for (int i = oldVersion; i < newVersion; i++) { switch (i) { case 2: String createAlarmColum = "ALTER TABLE notes ADD COLUMN alarm INT;"; db.execSQL(createAlarmColum); ForgetLogManager.showAppLog(createAlarmColum); break; } } }// onCreate(db);