【问题标题】:Safe way to update database in ormlite android在 ormlite android 中更新数据库的安全方法
【发布时间】:2013-12-22 04:46:29
【问题描述】:

我的应用程序使用ormlite 与 Sqlite 数据库进行通信。有许多屏幕从ormlite 获取数据。问题是我想在没有用户知识的情况下在后台更新数据库(它对用户是透明的)并且我的应用程序使用一些 CursorAdaptersLoaders 来获取数据。
行为如下所示:我的应用程序检查服务器中是否有新版本,它将从服务器下载新的 db 文件,然后通过 ormlite 帮助程序中的新服务器 db 文件从本地更改当前 db 文件。在更新进度发生时,用户可以正常更改屏幕或查看数据库中的数据(我只是使用 select 查询)
我已经搜索了一些答案,他们建议使用onUpgrade 方法,但是我该如何应用这个方法,因为我想完全更改数据库文件?以及如何在选择数据的同时切换数据库?
这是我的数据库助手:

  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);
    }       
} 

任何帮助将不胜感激!

【问题讨论】:

    标签: android sqlite ormlite


    【解决方案1】:

    我在我的项目中遇到过类似的情况,在检查新数据后我不得不用新数据刷新数据库。在尝试了这么多方法之后,最后我找到了一个解决方案。我不知道那个解决方案是否是最优的,但是在之后测试它工作正常。

    解决方法如下:-

    我正在以 json 形式获取新数据,因此我正在使用 temp_original-database-name.db 创建一个新的空白数据库,然后用新数据填充它(在您的情况下,您已经从服务器下载了完整的数据库,所以您不需要需要额外的帮助来创建临时数据库)。填充此数据后,我将使用文件系统方法将此数据库 temp_original-database-name.db 重命名为 original-database-name.db。

    我已经完成了测试,即使在第二次重命名数据库操作之后,用于原始数据库的原始帮助程序实例仍然存在。一切正常。

    希望这能有所帮助。请告诉我这是否有帮助,如果您对此有任何其他问题。

    【讨论】:

    • 实际上,我使用复制和替换文件的方法将现有的数据库文件替换为新的文件(您不能使用重命名,因为一个文件夹不能接受两个同名文件)。而这种方式可以奏效。我刚刚测试并看到复制任务只花了 100 - 300 毫秒。但是我的数据可能会越来越大,因此复制任务可能需要更多时间。所以我担心替换数据库文件时会发生错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多