【问题标题】:How to remove DB in method onUpgrade?如何在 onUpgrade 方法中删除数据库?
【发布时间】:2014-08-13 14:39:07
【问题描述】:

如何在 onUpgrade 方法中使用 SQLite 上的数据库删除文件?

我试过了:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    context.deleteDatabase(DATABASE_NAME);

    onCreate(db);
}

错误:无法解析上下文。

第二个:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    File dbFile = getDatabasePath("your_db_file_name");
    boolean deleted = dbFile.delete();

    onCreate(db);
}

错误:未为 TestDatabase 类型定义方法 getDatabasePath(String)。

【问题讨论】:

  • 现在您是尝试删除数据库中的数据并重新创建它,还是希望将它们全部重命名?
  • onUpgrade 使用活动事务调用;删除数据库文件是不可能的。你想解决什么问题?
  • 我希望每个新版本的应用都删除数据库。

标签: java android eclipse sqlite


【解决方案1】:

在你的 onUpgrade 函数中,你应该简单地运行 drop table 语句

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // delete our old table
    db.execSQL("DROP TABLE IF EXISTS " + tableName);

    // create our new table
    onCreate(db);
}

【讨论】:

    【解决方案2】:

    您不能删除该文件,因为它在调用此方法时正在使用。

    相反,如果你真的想删除数据库运行

    File dbFile = getDatabasePath("your_db_file_name");
    if(dbFile.exists() && dbFile.delete())
    {
        // Create new database if that is what you want to do.
    }
    

    在您实际实例化 DatabaseHelper 对象之前。在不了解其余代码的情况下,很难给出更详细的解决方案。

    【讨论】:

      【解决方案3】:

      您可以创建一个方法来清理表并在向其添加新值之前调用它

      public void delete_ALL_ROWS()
          {
              ourHelper = new DbHelper(ourContext);
              ourDatabase = ourHelper.getWritableDatabase();
      
              String deleteSQL = "DELETE FROM " + DATABASE_TABLE;
      
              ourDatabase.execSQL(deleteSQL);
      
              ourHelper.close();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        相关资源
        最近更新 更多