2012-09-25 81 views
1

我的ListView顯示來自我的SQLITE數據庫的數據。 By一個ListViewItem上的Longclick我刪除了這個特定的Item。 EveryThing正常工作,但我沒有刪除我的第一個項目。我沒有在LogCat中遇到任何錯誤。沒有任何反應。如何刪除SQLITE數據庫中的第一行?

下面是從數據庫類我的代碼:

public void deleteEntry(String TABLE, int pos) { 
    SQLiteDatabase database = this.getWritableDatabase(); 
    database.delete(TABLE, KEY_ROWID + "=?" , new String[] { String.valueOf(pos)}); 

    // also tryed this code 
    database.delete(TABLE, KEY_ROWID + "= '" + pos +"'",null); 
} 

這裏是我的的ListView活動的代碼:

// Deletes the given row 
      database.deleteEntry(MyDatabase.DATABASE_TABLE_ORDERS, position); 
      updateList(); 

我很舒爾的承諾INT pos代表相應數據庫條目的rowId(對於第一條目pos是0,第二POS爲1等等)

updateList()創建一個新的列表視圖,並加載所有從數據庫中的數據再次

有沒有人有一個想法,爲什麼我可以除了我的第一個條目之外,刪除我DB中ListView/rows中的所有項目? thx爲您的幫助!

+0

它必須工作。試着用調試點來跟蹤。 – Aswin

回答

1

通過您的問題幾次看完後我覺得我最初提出的在我的意見是問題...

在我看來,你正在使用的int pos參數,並認爲這是行ID在數據庫中,情況並非如此。 int pos參數是列表中的位置(根據排序等可以不同於行ID)。

行ID包含在偵聽器的long id參數中。以下更改應該會幫助你(假設我的猜測是正確的)。

@Override 
public void onListItemClick(ListView l, View v, int pos, long id) { 
     database.deleteEntry(MyDatabase.DATABASE_TABLE_ORDERS, id); 
     updateList(); 
} 

public void deleteEntry(String TABLE, long id) { 
    SQLiteDatabase database = this.getWritableDatabase(); 
    database.delete(TABLE, KEY_ROWID + "=?" , new String[] { String.valueOf(id)}); 

    // or this could be used 
    database.delete(TABLE, KEY_ROWID + "= " + id ,null); 
} 
+0

這真的很有幫助。謝謝!!!!!!!!不知道** long id **參數是否適用於數據庫。謝謝 :) – Daniel

0

database.execSQL( 「DELETE FROM」 + TABLE + 「ORDER BY」 + column_to_order_by + 「ASC LIMIT(0,1);」):

我definitly測試此上的測試表第一!

+0

'ORDER BY'子句可能對排序表有用,因此「第一行」具有含義。 – mah

+0

Right !, added .. – Jug6ernaut

+0

您也可以爲每個條目分配一個行號(它是表中的索引),然後您可以執行「DELETE FROM」+表+「WHERE ROW_ID =」+ pos – zabawaba99