我使用GreenDao并为类别创建条目,这完全有效。我的问题是,当我重复这个动作时, de.greenrobot.dao.DaoException失败:实体与DAO上下文分离。 我用SQLite调试器查看了数据库,每次看到 我插入了这些条目,sqlite_sequence中出现了一个条目。我用我的应用程序“SQLite Debugger”手动删除了它。 在此之后它起作用。
现在的问题。我该如何自动完成?
CodeSnippet
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):at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 02-04 12:05:38.883:E / AndroidRuntime(23568):at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 02-04 12:05:38.883:E / AndroidRuntime(23568):at 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):at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 02-04 12:05:38.883:E / AndroidRuntime(23568):at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587) 02-04 12:05:38.883:E / AndroidRuntime(23568):at 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)
答案 0 :(得分:0)
sqlite_sequence
跟踪自动增量值。你不应该搞乱它,因为它可能会破坏你的数据完整性。