Android 使用预加载的SQLite更新应用程序

Android 使用预加载的SQLite更新应用程序,android,sqlite,Android,Sqlite,我的应用程序使用预加载并从/assets复制到data/data()数据库,它只是一个产品数据表,并且是“只读”的,因为用户不保存到数据库中。如果我向DB表中添加更多产品,我需要将其提供给现有用户。如果我用新数据库更新我的应用程序,更新过程是否会删除从assets dir复制到data/data的旧数据库,从而允许“DBexists”检查在第一次运行更新版本时失败,从而触发将新数据库从/assets复制到data/data?我脑子里想的唯一一件事是在SQLiteOpenHelper实现中滥用on

我的应用程序使用预加载并从/assets复制到data/data()数据库,它只是一个产品数据表,并且是“只读”的,因为用户不保存到数据库中。如果我向DB表中添加更多产品,我需要将其提供给现有用户。如果我用新数据库更新我的应用程序,更新过程是否会删除从assets dir复制到data/data的旧数据库,从而允许“DBexists”检查在第一次运行更新版本时失败,从而触发将新数据库从/assets复制到data/data?

我脑子里想的唯一一件事是在
SQLiteOpenHelper
实现中滥用onUpgrade()方法,并通过使用新版本号对此进行调用并让它在该方法中执行您需要它执行的任何操作来更改数据库


话虽如此,我对Android应用程序更新过程知之甚少,因此这可能有点离题。

我脑子里想的唯一一件事就是在
SQLiteOpenHelper
实现中稍微滥用onUpgrade()方法,并通过使用新版本号调用该数据库,并让它在该方法中执行您需要它执行的任何操作来更改数据库


话虽如此,我对Android应用程序更新过程了解不多,所以这可能有点离题。

简短回答,是的,如果您将以下代码片段放在
onUpgrade()方法中:

try {
    copyDataBase("database.db");
} catch (IOException e) {
    Log.w(TAG, e);
}
在写入db文件之前,删除
copyDataBase()
中的db文件可能是值得的,只是为了减少其损坏的可能性


注意:这使用了您链接的问题的公认答案中使用的实现。

简短回答,是的,如果您将以下代码片段放入
onUpgrade()
方法中:

try {
    copyDataBase("database.db");
} catch (IOException e) {
    Log.w(TAG, e);
}
在写入db文件之前,删除
copyDataBase()
中的db文件可能是值得的,只是为了减少其损坏的可能性


注意:这使用了您链接的问题的公认答案中使用的实现。

现在重新阅读链接问题的升级部分,我很可能会搞砸。我的数据库最大可能只有200k,所以每次运行应用程序时我都会复制它。这是否会执行数据/数据中的删除操作?File dir=getFilesDir();File File=新文件(dir,“database.db”);布尔删除=file.delete();是的,我想是这样,但是在数据库不存在的情况下,要小心捕捉错误(
FileNotFoundException
)。我发现我的数据库很容易损坏/无法正确复制,所以也要小心检查。现在重新阅读链接问题的升级部分,我很有可能会搞砸。我的数据库最大可能只有200k,所以每次运行应用程序时我都会复制它。这是否会执行数据/数据中的删除操作?File dir=getFilesDir();File File=新文件(dir,“database.db”);布尔删除=file.delete();是的,我想是这样,但是在数据库不存在的情况下,要小心捕捉错误(
FileNotFoundException
)。我发现我的数据库很容易损坏/无法正确复制,所以也要小心检查。