我的应用使用ormlite
与Sqlite数据库进行通信。有许多屏幕可以从ormlite
获取数据。问题是我想在没有用户知识的情况下在后台更新数据库(它对用户透明),我的应用程序使用一些CursorAdapters
和Loaders
来获取数据。
行为如下所示:我的app检查服务器中是否有新版本,它将从服务器下载新的db文件,然后通过ormlite helper中的新服务器db文件从本地更改当前db文件。在更新进度发生时,用户可以正常更改屏幕或查看数据(我只使用选择查询)
我搜索了一些答案,他们建议使用onUpgrade
方法,但我怎么能在我的情况下应用这个,因为我想完全更改数据库文件?如何在选择数据时切换数据库?
这是我的db帮助器:
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
public DatabaseHelper(Context context){
super(context, "document.sqlite", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, Category.class);
TableUtils.createTable(connectionSource, Book.class);
} catch (Exception ex) {
Ln.e(ex);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion,
int newVersion) {
try{
TableUtils.dropTable(connectionSource, Category.class, true);
TableUtils.dropTable(connectionSource, Book.class, true);
// get new one
onCreate(db, connectionSource);
}catch(Exception ex){
Ln.e(ex);
}
}
任何帮助将不胜感激!
答案 0 :(得分:0)
我的项目中有类似的情况,我必须在检查新数据后用新数据刷新数据库。尝试了这么多方法后最后我达成了一个解决方案。我不知道这个解决方案是否是最佳解决方案但是之后测试它工作正常。
解决方案如下: -
我以json格式获取新数据,所以我创建了一个新的空白数据库,其中包含temp_original-database-name.db,然后使用新数据填充它(在您的情况下,您从服务器下载完整的数据库,因此您不需要需要额外的帮助来创建临时数据库)。填充此数据后,我将使用文件系统方法将此数据库temp_original-database-name.db重命名为original-database-name.db。
我已经完成了测试,原始数据库使用的原始帮助器实例即使在第二次重命名数据库操作后仍然存在。一切正常。
希望这可以有所帮助。请告诉我这是否有帮助,如果您对此有任何其他疑问。