在Android中覆盖SQLite数据库表的最佳方法是什么?

时间:2013-11-22 23:00:59

标签: android performance sqlite

当我的Android应用程序有新数据可用时,我需要完全删除其中一个SQLite数据库表中的所有当前条目,并用新数据替换它们。做这个的最好方式是什么?

最好运行

DELETE * FROM my_table

为数据库中的每一行运行delete查询

或运行

database.execSQL(DATABASE_DROP_MY_TABLE);
database.execSQL(DATABASE_CREATE_MY_TABLE);

DATABASE_DROP_MY_TABLE是SQL放弃表而DATABASE_CREATE_MY_TABLE是 SQL再次创建表而没有条目。

然后按照其中一个插入新数据。

当然,我可能还有其他方法可以做到这一点。

2 个答案:

答案 0 :(得分:1)

假设你正在使用SQLiteOpenHelper,你可以关闭db,删除整个文件并重新创建db:

class MyDatabase extends SQLiteOpenHelper {
  public static final String DB_NAME = "wat";

  public MyDatabase(Context context) {
    super(context, DB_NAME, null, CURRENT_VERSION);
  }
}


dbHelper.close(); // dbHelper is your MyDatabase instance
context.deleteDatabase(DB_NAME);
SQLiteDatabase db = dbHelper.getWritableDatabase() // will create empty db

此解决方案的好处在于,在向架构添加新表时,不必更新表重置代码。它还可以正确地重新创建您可能已添加的索引。

答案 1 :(得分:0)

我不会使事情变得复杂,只需使用DROP TABLE语句删除表即可。正如doc 所说:

  

SQLite DROP TABLE语句用于删除表定义以及该表的所有关联数据,索引,触发器,约束和权限规范。

你会有干净的盘子,然后再次创建表并添加你的新数据。