【问题标题】:How to use sugar orm to run migrations如何使用 Sugar orm 运行迁移
【发布时间】:2015-08-22 05:34:48
【问题描述】:

我有一个现有的 Android 应用程序,它预先打包了一个名为 app.db 的数据库。 app.db 文件位于 src/main/res/raw 中。在启动应用程序时,它会被复制到 data/data/app/databases。

db的当前版本是2,是使用SQLiteOpenHelper设置的。我不想将此数据库绑定到任何模型对象,而只想通过运行一些 dmls 来添加或删除行。

清单如下所示:

<application
   android:label="@string/app_name"
   android:icon="@drawable/launcher"
   android:name="MyApplication">
   ...
 <meta-data android:name="DATABASE" android:value="app.db" />
 <meta-data android:name="VERSION" android:value="3" />
 <meta-data android:name="QUERY_LOG" android:value="true" />
</application>

MyAppplication 类扩展了 SugarApp。 我在 assets 中创建了一个名为 sugar_upgrades 的文件夹,并在其中创建了一个名为 3.sql 的文件。该文件包含如下脚本:

DELETE FROM images WHERE id = 53;

但在运行应用程序后,此脚本永远不会运行。我认为问题是 Sugar 期望 db 出现在 /data 文件夹中。但在应用程序开始时,它存在于 res/raw 中,这就是它无法拾取它的原因。我有什么办法可以做到这一点?

【问题讨论】:

    标签: android android-sqlite sugarorm


    【解决方案1】:

    我决定写一个答案而不是评论,因为我需要一些额外的格式帮助。我会根据需要更新这篇文章。

    首先,您应该查看SchemaGeneratorhere。您会注意到有几个日志语句可以帮助缩小您的问题范围。举个例子:

    Log.i("Sugar", "not a sugar script. ignored." + file);
    

    所以我建议在您的 logcat 输出中搜索“Sugar”标签,看看是否显示了任何有用的信息。

    第二个对调试有价值的地方是 SugarDb 类发现 here。这个类扩展了SQLiteOpenHelper并实现了onUpgrade方法:

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        schemaGenerator.doUpgrade(sqLiteDatabase, oldVersion, newVersion);
    }
    

    克隆 Sugar 源代码并手动编译项目并将其添加为依赖项可能会有所帮助。然后,您将能够直接在 SQLite 数据库上测试您的 SQL 查询,如下所示:

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        schemaGenerator.doUpgrade(sqLiteDatabase, oldVersion, newVersion);
    
        sqLiteDatabase.rawQuery("DELETE FROM images WHERE id = ?", new String[]{"53"});
    }
    

    最后,如果您在启动时发现 /data 文件夹中的数据不可用,您将不得不修改 Sugar 源代码以在数据加载后更改数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2011-01-18
      • 1970-01-01
      • 2017-03-05
      相关资源
      最近更新 更多