如何解决greenDAO"没有这样的表存在错误"什么时候做InsertOrReplace?

时间:2016-06-24 06:53:12

标签: android sqlite orm greendao

我正在使用greenDAO并且我已经成功生成了所有必需的类和实体,并且我可以看到我的表已经创建了,但是在将断点放在要替换的行上之后,我得到一个错误告诉我"没有这样的表存在错误"。

try {
    appTimeUsageDao.insertOrReplace(appStats);
//} catch (DaoException  e) {
} catch (Exception e) {
    Log.e("Error", "Some exception occurred", e);
    Log.e("APP_TAG", Log.getStackTraceString(e));
}

3 个答案:

答案 0 :(得分:5)

对我来说,这个问题与清单中的allowBackup标志有关。

此功能是从api 23开始添加的,其效果是即使在卸载应用程序时也会恢复设备数据库,因此,如果您尝试通过卸载来清除数据库,则无法将其恢复为Android恢复它,类似于iCloud的工作原理。

我可能会在解释此错误的文档中遗漏某些内容,但我不清楚这可能是GreenDao 3中的问题。此外,由于许多用户将设置测试实体而不考虑处理升级路径,因为他们不想保留测试表,这导致恢复单个表并且没有创建新表的情况。

所以基本上如果您只是测试将标志设置为false,否则处理升级流程。 (标志默认为true!)

https://developer.android.com/guide/topics/data/autobackup.html

答案 1 :(得分:1)

我关注了this指南并遇到了同样的问题。由于某种原因,我的数据库名称错误。检查它们在AndroidManifest.xml文件中的名称是否相同:

<meta-data
        android:name="DATABASE"
        android:value="notes.db"/>

在你的课程中扩展了应用程序:

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes.db");

答案 2 :(得分:0)

你做过这个吗?

mSQLiteDatabase = mOpenHelper.getWritableDatabase();
mDaoMaster = new DaoMaster(mSQLiteDatabase);
mDaoSession = mDaoMaster.newSession();
appTimeUsageDao = mDaoSession.getAppTimeUsageDaoDao();