2013-10-04 55 views
11

我有一個WCF女巫提供了一些JSON數據,然後將其保存到本地數據庫中。工作正常 我有一個活動女巫從本地數據庫填充數據到一個列表視圖工作正常。Android中刪除表中所有行的最佳方式是什麼?

public void fillData() { 

    // Fields from the database (projection) 
    // Must include the _id column for the adapter to work 
    String[] from = new String[] { TodoTable.COLUMN_SUMMARY }; 
    // Fields on the UI to which we map 
    int[] to = new int[] { R.id.label }; 

    getLoaderManager().initLoader(0, null, this); 
    adapter = new SimpleCursorAdapter(this, R.layout.todo_row, null, from, 
      to, 0); 

    lw.setAdapter(adapter); 
} 

我無法弄清楚什麼是在WCF同步操作之前刪除所有行的最佳方法。

我能做到這一點通過將所有編號的從數據庫中,然後找到該行的URI,然後使用:

getContentResolver().delete(uri, null, null) 

我只是覺得必須有一個更好的辦法,我在網上看到很多例子說使用dbHelper類,但我無法弄清楚如何從活動或在ContentProvider的

希望讓任何意義

+3

database爲你的數據庫名稱和tablename如果你有自己的ContentProvider然後'getContentResolver()。刪除(URI,NULL,NULL)'是好的......但是。 .. uri不應該指向特定的「item」,而是指向整個「dir」('content:// com.authority/tablename/111' <= item uri,'content:// com.authority/tablename' < dir uri) – Selvin

+0

如果你這樣做,你不需要找到數據庫的所有id。所有你需要做的就是給它的數據庫的URI,而不是一個特定的項目 – tyczj

+0

對不起,這是我是新手的(@Selvin。你的答案已經完成了。Ty。作出回覆,所以我可以除了它,正確的代碼是:'getContentResolver().delete(TodoContentProvider.CONTENT_URI,null,null);' – Jester

回答

28

使用DatabaseHelper所有的行,你可以這樣做:

dbHelper = new DatabaseHelper(context); 
database = dbHelper.getWritableDatabase(); 

public void clearTable() { 
    database.delete(TABLE, null,null); 
} 
+0

這是否刪除整個表?我仍然需要表只是想清除行 –

+1

@Tintinabulator Zea這隻會刪除給定表中的所有行。更多信息:http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#delete(java.lang.String,java.lang.String,java.lang.String []) – Kristopher

+0

這是不是最優的,因爲它不通知數據變化。你應該覆蓋你的內容提供商的刪除方法 – hadi

-1

如果你只是想刪除表中的所有行訪問dbHelper類:

drop table if exists "tablename" 

然後用適當的列重新創建表格。我個人覺得這樣做很容易。

+0

這不是一個好主意,因爲如果你打算升級數據庫,你必須保留創建表查詢的不同版本。 – npace

+0

我通常採取了一種補丁方法,你會保留舊的創建並將任何必要的更新語句應用到表中。然後,您可以應用所有關於創建的聲明(如果它們不適用,可以安全地失敗),並在每次啓動時保持最新狀態。這在多實例設置上不起作用(雖然你希望事先設置好中央數據庫) – Rogue

+0

這對清除表格不是一個好主意。但是你可以通過SQL自己的刪除查詢找到簡單的解決方案 – Mahmudul

6

嘗試

<your-SQLite-instance>.execSQL("DELETE FROM <table_name>"); 

這將下降,由<table_name>

+1

閱讀文檔:execSQL() 執行不是SELECT/INSERT/UPDATE/** DELETE **的單個SQL語句。 – Selvin

+1

@Selvin你也應該讀它,這是'execSQL(String sql,Object [] bindArgs)'不適用於'execSQL(String sql)'。我發佈的代碼在生產中使用,並且可以工作... – bclymer

+1

好的如此:'它無法返回任何數據(例如受影響的行數)。'DELETE返回受影響的數'使用我發佈的代碼在生產和工作',但你應該鼓勵使用insert/update/delete來代替(如'execSQL(String sql)'doc) – Selvin

2

嘗試使用此代碼來刪除表中的所有行:

database.delete(tablename, null,null); 

只需更換你要刪除的行

相關問題