Android中删除表中所有行的最佳方式是什么?

问题描述:

我有一个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' Selvin

+0

如果你这样做,你不需要找到数据库的所有id。所有你需要做的就是给它的数据库的URI,而不是一个特定的项目 – tyczj

+0

对不起,这是我是新手的(@Selvin。你的答案已经完成了。Ty。作出回复,所以我可以除了它,正确的代码是:'getContentResolver().delete(TodoContentProvider.CONTENT_URI,null,null);' – Jester

使用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

如果你只是想删除表中的所有行访问dbHelper类:

drop table if exists "tablename" 

然后用适当的列重新创建表格。我个人觉得这样做很容易。

+0

这不是一个好主意,因为如果你打算升级数据库,你必须保留创建表查询的不同版本。 – npace

+0

我通常采取了一种补丁方法,你会保留旧的创建并将任何必要的更新语句应用到表中。然后,您可以应用所有关于创建的声明(如果它们不适用,可以安全地失败),并在每次启动时保持最新状态。这在多实例设置上不起作用(虽然你希望事先设置好*数据库) – Rogue

+0

这对清除表格不是一个好主意。但是你可以通过SQL自己的删除查询找到简单的解决方案 – Mahmudul

尝试

<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

尝试使用此代码来删除表中的所有行:

database.delete(tablename, null,null); 

只需更换你要删除的行