【问题标题】:SQLite Howto delete entries from sqlite_sequence?SQLite 如何从 sqlite_sequence 中删除条目?
【发布时间】:2014-02-02 14:19:29
【问题描述】:

我使用 GreenDao 并为类别创建条目,这非常有效。我的问题是,当我重复该操作时,de.greenrobot.dao.DaoException: Entity is detached from DAO context 失败。 我用 SQLite 调试器查看了数据库,发现 每次 我插入这些条目时,出现了一个 sqlite_sequence 条目。我用我的应用程序“SQLite Debugger”手动删除了它。 之后它就可以工作了。

现在是问题。我怎样才能自动做到这一点?

代码片段

if (category_CategoriesCompaniesQuery == null || category_CategoriesCompaniesQuery.equals(null)) {
        QueryBuilder<CategoryCompany> tempQueryBuilder = queryBuilder();
        tempQueryBuilder.where(Properties.CategoryID.eq(categoryID));
        category_CategoriesCompaniesQuery = tempQueryBuilder.build().forCurrentThread();
    } else {
        category_CategoriesCompaniesQuery.forCurrentThread().setParameter(0, categoryID);
    }
    return category_CategoriesCompaniesQuery.forCurrentThread().list();
}

堆栈跟踪

02-04 12:05:38.883: E/AndroidRuntime(23568): java.lang.RuntimeException: 执行 doInBackground() 时出错 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 android.os.AsyncTask$3.done(AsyncTask.java:300) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 java.util.concurrent.FutureTask.setException(FutureTask.java:222) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 java.util.concurrent.FutureTask.run(FutureTask.java:242) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 java.lang.Thread.run(Thread.java:841) 02-04 12:05:38.883: E/AndroidRuntime(23568): 由: de.greenrobot.dao.DaoException: 实体与 DAO 上下文分离 02-04 12:05:38.883: E/AndroidRuntime(23568): at com.adamasvision.mytermin.model.Category.getCategoriesCompanies(Category.java:152) 02-04 12:05:38.883: E/AndroidRuntime(23568): at com.adamasvision.mytermin.UserState$1.doInBackground(UserState.java:415) 02-04 12:05:38.883: E/AndroidRuntime(23568): at com.adamasvision.mytermin.UserState$1.doInBackground(UserState.java:1) 02-04 12:05:38.883: E/AndroidRuntime(23568): 在 android.os.AsyncTask$2.call(AsyncTask.java:288) 02-04 12:05:38.883: E/AndroidRuntime(23568): at java.util.concurrent.FutureTask.run(FutureTask.java:237)

【问题讨论】:

  • 请添加您的代码和堆栈跟踪。
  • 添加代码和堆栈跟踪
  • 您正在尝试解决错误的问题。 sqlite_sequence 不是问题。您应该改为修复“实体与 DAO 上下文分离”。有很多关于 SO 的结果。
  • 请贴出getCategoriesCompanies的完整代码。

标签: android sqlite sequence greendao


【解决方案1】:

sqlite_sequence 跟踪自动增量值。你不应该乱用它,因为它可能会破坏你的数据完整性。

【讨论】:

  • 是的,我知道自动删除它无济于事,因为单独的应用程序关闭了我的应用程序的后台任务,并且通过我的自动删除,我不想这样做。我搜索了一下and found here a possible answer。我必须使用“loadDeep”和“queryDeep”,但我不知道如何使用它。你知道吗,或者你能帮帮我吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多