android - 标准 ORMLite 方法中的 CursorWindowAllocationException

标签 android sql ormlite android-cursor

我需要在数据库中保存一些对象。我在我的 Dao 类中使用这段代码。

  public void saveActions(List<Action> actionList) throws SQLException {
    for (Action action : actionList) {
        createOrUpdate(action);
      }
  }

有时我在 createOrUpdate() 函数中有 CursorWindowAllocationException。

有人解决这个问题吗?

最佳答案

如果您查找 CursorWindowAllocationException 的来源,它显示为:

This exception is thrown when a CursorWindow couldn't be allocated, most probably due to memory not being available.

如果您关注堆栈,您会看到调用 com.j256.ormlite.android.AndroidDatabaseConnection.queryForLong 为每个 createOrUpdate 调用创建一个游标。

所以这里可能发生的情况是,在释放内存之前创建了太多的 Cursors

您应该在 transaction 中执行这些调用,或者更好的是,使用 batch tasks .例如

actionDao.callBatchTasks(new Callable<Void>() {
        public Void call() throws SQLException {
            for (Action action : actionList) {
                actionDao.createOrUpdate(action);
            }
        return null;
    }
});

关于android - 标准 ORMLite 方法中的 CursorWindowAllocationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25639242/

相关文章:

android - 从 Fragment 添加项目到操作栏的选项菜单后发生崩溃,然后更改方向

android - 在日志中显示来自 SQLite 数据库的 ArrayList

sql - 将图表转换为 SQL 数据库

Android ORMLite 缓慢创建对象

java - 扩展类型参数的内联类

android - 在ndk中获取android versionCode

Android 检查应用程序状态

python - SQL "partition by"Python/R 中的类似功能

sql - 如何根据“年”和“周”列排除周?

java - RoboSpice 和 ORMLite - 访问数据