2012-03-22 52 views
3

我有兩個表第一個是「TABLE_SUBJECT」,第二個是「TABLE_CHAPTER」。現在我想
添加一些列並刪除以前。我的問題是如何做到這一點。我嘗試更新,但是
它顯示以前不是新的。我需要刪除以前的和更新表與新列。
我更改版本號,但它不起作用。請給我提示或參考。如何在sqlite中更新表?

這裏是我的SQLite的一些代碼:

@Override 
public void onCreate(SQLiteDatabase database) { 

    database.execSQL(DATABASE_CREATE); 
    database.execSQL(DATABASE_CREATE1); 

} 

@Override 
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 
    Log.w(MySQLiteHelper.class.getName(), "Upgrading database from version " 
      + oldVersion + " to " + newVersion 
      + ", which will destroy all old data"); 
    database.execSQL("DROP TABLE IF EXISTS " + TABLE_SUBJECT); 
    database.execSQL("DROP TABLE IF EXISTS" + TABLE_CHAPTER); 
    onCreate(database); 
} 

回答

6

你試試這個代碼

public long update_todo_not(String a, String b, String c, String d, 
     String e, String f, String g, String id) { 
    ContentValues con = new ContentValues(); 

    con.put("title", a); 
    con.put("description", b); 
    con.put("due_date", c); 
    con.put("alarm_time", d); 
    con.put("category", e); 
    con.put("alarm_set",f); 
    con.put("priority", g); 
    Log.v("priority", g+""); 
    return mDb.update(DATABASE_TABLE_TODO_LIST, con, "id ='" + id + "'",null); 

} 
3

SQLite中不能刪除列。在FAQ中有一個解決方法。

要添加一個新列,您可以簡單地增加數據庫版本並將創建的字符串更改爲所需的數據庫佈局(刪除要刪除的列並添加另一列)。當數據庫下一次打開時會調用UpdateUpdate,這會刪除現有的表。之後,創建更改的表格。這不是一個好方法,因爲你會丟失數據庫中的所有數據。

要添加一個新列而不丟失所有數據,您必須將onUpgrade方法更改爲類似的方式(這樣可以預測當前數據庫版本爲1,如果不是簡單地更改數字)和增加數據庫版本:

​​

這種方法是可擴展的,因爲當有新的變化,你可以簡單地添加的情況下2,案例3 ...不要在案件結束加休息。這樣,如果應用程序更新將版本增加到3,並且更新的應用程序仍然處於1(可能錯過了更新),則會應用所有更改。

Here你可以找到alter table的文檔。 sqlite站點(sqlite.org)通常對尋找這類事情非常有幫助。

+0

我剛剛看了你的答案,我只是想知道如何應用程序知道它是在數據庫的什麼版本?原來的問題只有'database.execSQL(DATABASE_CREATE);'它沒有說明數據庫是什麼版本,我現在面臨同樣的問題 – Sjharrison 2015-10-07 13:46:06