【问题标题】:Java Realm get latest inserted itemJava Realm 获取最新插入的项目
【发布时间】:2016-08-14 09:56:52
【问题描述】:

在 Realm 数据库解决方案中,我如何才能获得具有最佳性能的最新插入项?

此代码是我解决该问题的解决方案

List<Transactions> allItems = realm.where(Transactions.class).findAll().sort("createdAt", Sort.DESCENDING);
String             latestId = allItems.get(0).getId();
getUserLatestTransactions(Integer.parseInt(latestId));

还有其他解决方案或 Realm 已经实现了吗?

【问题讨论】:

  • 我学到了在字符串中隐藏整数是一个糟糕的想法!使用多头

标签: java android realm


【解决方案1】:

这是你可以做的——考虑到 Realm 读取不会复制,这意味着它并不昂贵并且不会对你的 UI 线程产生太大影响,在存储你的项目后,你可以findAllSorted("createdAt)findAllSorted("id"),然后找到最后一个id 使用last() 这样的方法:

//after commitTransaction, 

RealmResults<Transactions> allTransactions = realm.where(Transactions.class).findAllSorted("createdAt");

//If you have an incrementing id column, do this
long lastInsertedId = allTransactions.last().getId();

这应该为您提供给定模型的最后插入的 ID。

还有一点很重要,要让它工作,你的模型中必须有一个这样的列,带有 id;

public class Transactions extends RealmObject{

   @PrimaryKey @Index
   private long id;

   //getters and setters accordingly!
}

我希望这会有所帮助!祝你好运,编码愉快!

更新

我刚刚意识到realm.copyToRealm(obj) 返回一个对象!

这意味着您可以简单地这样做:

realm.beginTransaction();
Transactions transaction = realm.copyToRealm(newTransaction);
long id = transaction.getId();
realm.commitTransaction();

请试试这个并告诉我!

【讨论】:

  • 谢谢先生,没有任何其他解决方案可以在不将所有数据提取到列表的情况下获得它吗?像mysql解决方案last_insert_id()是吗?
  • 目前我还没有看到任何其他解决方案,但我会继续搜索,如果找到会更新您;
  • 谢谢!我也有一些好消息要告诉你;您可以获取刚刚存储的对象,因为领域返回该对象;让我更新答案
  • long id = transaction.getId(); 在插入数据后想要获取最新行时非常好,感谢更新您的帖子先生:)
【解决方案2】:
Transactions item = realm.where(Transactions.class).findAll().last()

注意:如果你只想得到最后插入的数据,没有排序方法

【讨论】:

  • 格式化代码会很有用,这样可以清楚什么是实际代码,什么是解释性文本。
【解决方案3】:
val obj = realm.where<Transactions>()
                .sort("createdAt", Sort.DESCENDING)
                .findFirst()

if(obj != null){
   val latestId = obj.id
}

【讨论】:

    【解决方案4】:

    如果 Id 是唯一且增量的,您可以按它进行排序或将时间设置为 long 值并按照上面的方法进行操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      相关资源
      最近更新 更多