ormdroid / Sqlite删除和更新

时间:2013-08-06 14:52:14

标签: android android-sqlite

我正在试用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();
}
  }

1 个答案:

答案 0 :(得分: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();
}