2013-01-22 41 views
6

如何刪除並重新創建包含更新信息的表?SQLite拖放並重新創建表

例如;我在申請表中有5個記錄。

ID  Entry 
1  a 
2  b 
3  c 
4  d 
5  e 

現在,當我刪除一條記錄可以說,ID 3表變得

ID  Entry 
1  a 
2  b 
4  d 
5  e 

我怎麼能放棄它,並重新創建它成爲本:

ID  Entry 
1  a 
2  b 
3  d 
4  e 

其實刪除由用戶控制,因此任何記錄都可以隨時刪除。

+0

你爲什麼要實現這一目標?每當某個用戶更改某些內容時,您需要重新創建數據庫。 – Leandros

+1

你爲什麼需要這個?而不是找到回答你問題的麻煩方式,我寧願找到一種不需要它的方法。 – njzk2

+0

沒有。我想重新創建表而不是數據庫。有幾個原因,例如:刪除記錄時,刪除過程由當前選中的行完成,因爲我只能選擇第4行,因此ID 5不能刪除。 – Pztar

回答

13

你可以做以下操作:刪除該行要刪除:

 public boolean deleteRow(int id) 
     { 
     return db.delete(YOUR_TABLE, ROW_ID + "=" + _id, null) > 0; 
     } 

讀其餘條目(只項,而不是ID)到一個ArrayList,放下你的表:

 db.execSQL("DROP TABLE IF EXISTS " + YOUR_TABLE); 

並重新創建您的表格。然後身份證號碼將再次從1-XX在訂單

+1

這幾乎是我所擁有的。但是,當我刪除表然後重新創建它時,它將作爲NullPointer返回。我不知道我想我會再擺弄它一些。 – Pztar

+0

所以你可以顯示你已經完成的代碼?例如,如果您按錯誤順序完成了操作,則可能在刪除您的表之前將其保存到arrayList中。這可能是你獲得空指針的原因。在德國,我們說,有時你無法看到這麼多樹木造成的森林:) – Opiatefuchs

+0

需要在EXISTS後添加一個空格 – Matthew

1

我知道這是一箇舊帖子,但我想我會清理的東西,可能會與你一樣做你基於你的評論相同的事情:

當記錄被刪除的刪除處理由當前 所選行完成,因爲我最多隻能選擇到行4,ID 5永遠不能被刪除 。

你真的不應該重新創建你的ID。如果它們被用作另一個表中的關鍵字,那麼它就會弄亂它們,再加上如果你有一個大型的數據庫,重新創建它們可能會浪費時間,因爲真的沒有必要。

你應該做的是保存一個ID數組以及條目數組,以便根據他們選擇的行(或者其他方式鏈接ID和值,以便您可以抓取他們以後)。

在上面的例子中,有人刪除了該行id爲3後,你的陣列應該是這樣的:

entries = { "a","b","d","e" } 
ids = { 1,2,4,5 } 

,如果有人選擇了「E」,這是第四個項目,只需將其從刪除表中id等於ids數組中的第四個值,在這種情況下爲5。

這種方式,如果項目不斷被添加和刪除,您的數據庫可能會以ID 2,34,56和435結束。它並不重要,因爲您的代碼將保持跟蹤,並知道刪除哪個ID。

0

的另一種方法

public boolean deleteTable(int id) { 
    SQLiteDatabase database = dbHelper.getReadableDatabase(); 
    final String whereClause = DBHelper.COLUMN_ID + "=?"; 
    final String whereArgs[] = {String.valueOf(id)}; 
    int affectedRows = database.delete(DBHelper.TABLE_NAME_OGR, whereClause, whereArgs); 
    return affectedRows > 0; 
}