【问题标题】:ormdroid / Sqlite delete and updateormdroid / Sqlite 删除和更新
【发布时间】:2013-10-03 04:30:02
【问题描述】:

我正在尝试将ormdroid 作为 Android 的 ORM 工具。 我有一个我想要保留的收藏夹类的对象列表,我时不时地使用 ormdroid 将这些对象的列表保存到磁盘。

用户从列表中删除的那些收藏夹当然也应该从磁盘中删除,所以我想先从磁盘中删除所有收藏夹,然后再次保存列表:

                List<Favorite> oldFavs = Entity.query(
                        Favorite.class).executeMulti();

                for (Favorite f : oldFavs) {
                    f.delete();
                    Log.d("ORM", "Deleting: " + f.getTitle());

                }

然后再次保存我的收藏夹:

                for (Favorite f : myFavorites) {
                    f.save();
                        Log.d("ORM", "Saving: " + f.getTitle());                
                }

通过在我的代码中添加大量 Log.d(),我发现了以下内容:

从磁盘中删除所有收藏夹后,使用 ormdroid 的查询确实返回了大小为 0 的列表。 但是当我再次保存我的收藏夹时,其中一些(旧记录中已经存在的那些)会更新,而不是从 f.save() 方法新创建的,但仍不可用于查询。

有没有人积极使用 ormlite 可以在这里帮助我,或者有人可以验证 ormlite 的 delete() 方法中的代码实际上并且肯定会从数据库中删除这条记录:

public void delete() {
    if (!mTransient) {
      SQLiteDatabase db = ORMDroidApplication.getDefaultDatabase();
      db.beginTransaction();


  try {
    delete(db);
    db.setTransactionSuccessful();
  } finally {
    db.endTransaction();
  }

  db.close();
}
  }

【问题讨论】:

    标签: android android-sqlite


    【解决方案1】:

    我在使用 ORMDroid 删除实体时也遇到了一些问题,似乎删除是在插入之后执行的,即使代码顺序正确。虽然这可能不是 ORMDroid 的问题,但是我现在无法理解一些 SQLite 怪癖。无论如何,我暂时能够以这种方式绕过问题,只是真正切换删除/插入的顺序:

    // First create the list of items to delete.
    // Don't delete them just yet though.
    List<Favorite> oldFavs = Entity.query(Favorite.class).executeMulti();
    
    // Insert new ones
    for (Favorite f : myFavorites) {
       f.save();
    }
    
    // Delete the old ones
    for (Favorite f : oldFavs) {
        f.delete();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      相关资源
      最近更新 更多