如何删除 Android 房间数据库的文件?
How do I delete the file of an Android Room database?
我已经实现了一个房间数据库,该数据库是在应用程序首次启动时使用 SQLiteAssetHelper 从资源文件分发的。
数据库包含游戏状态数据,所以如果玩家想重新开始,我想从资源中再次复制数据库文件并覆盖 "local/internal" 文件。
所以我的想法是删除内部 db 文件,这样 SQLiteAssetHelper
将再次从资源中复制初始数据库。
谢谢!
凯夫
这是一个工作示例:
public static void deleteDatabaseFile(Context context, String databaseName) {
File databases = new File(context.getApplicationInfo().dataDir + "/databases");
File db = new File(databases, databaseName);
if (db.delete())
System.out.println("Database deleted");
else
System.out.println("Failed to delete database");
File journal = new File(databases, databaseName + "-journal");
if (journal.exists()) {
if (journal.delete())
System.out.println("Database journal deleted");
else
System.out.println("Failed to delete database journal");
}
}
但老实说,我认为在运行时删除数据库既不安全也不可靠。您必须确保没有任何东西正在使用它并且没有与数据库的任何打开连接。
您可以使用 dedicated method
而不是手动删除数据库文件
context.deleteDatabase("database_name")
我已经实现了一个房间数据库,该数据库是在应用程序首次启动时使用 SQLiteAssetHelper 从资源文件分发的。
数据库包含游戏状态数据,所以如果玩家想重新开始,我想从资源中再次复制数据库文件并覆盖 "local/internal" 文件。
所以我的想法是删除内部 db 文件,这样 SQLiteAssetHelper
将再次从资源中复制初始数据库。
谢谢!
凯夫
这是一个工作示例:
public static void deleteDatabaseFile(Context context, String databaseName) {
File databases = new File(context.getApplicationInfo().dataDir + "/databases");
File db = new File(databases, databaseName);
if (db.delete())
System.out.println("Database deleted");
else
System.out.println("Failed to delete database");
File journal = new File(databases, databaseName + "-journal");
if (journal.exists()) {
if (journal.delete())
System.out.println("Database journal deleted");
else
System.out.println("Failed to delete database journal");
}
}
但老实说,我认为在运行时删除数据库既不安全也不可靠。您必须确保没有任何东西正在使用它并且没有与数据库的任何打开连接。
您可以使用 dedicated method
而不是手动删除数据库文件context.deleteDatabase("database_name")