【问题标题】:Room Database - How to return entire row after insert?房间数据库 - 插入后如何返回整行?
【发布时间】:2021-07-30 07:33:34
【问题描述】:

我有插入一行的查询

@Dao
public interface NoteDao {
    @Insert
    Long insert(Note note);

}

我正在使用 RxJava 在后台线程上执行查询:

 public void insert(Note note) {
        Single.fromCallable(() -> noteDao.insert(note))
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SingleObserver<Long>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {

                    }

                    @Override
                    public void onSuccess(@NonNull Long aLong) {
                        Log.d(TAG, "onSuccess: New row Id: " + aLong);
                    }

                    @Override
                    public void onError(@NonNull Throwable e) {

                    }
                });

    }

目前它成功返回了为插入的 DAO 新创建的主键。如何在不使用新行 ID 执行第二次查询的情况下返回整个插入的行?

在 postgresql 中我会这样做:

`INSERT INTO note_table(note_title, note_description) VALUES ($1, $2) RETURNING *`

不确定如何使用 Room 库进行操作

【问题讨论】:

    标签: android rx-java android-room rx-java2 rx-android


    【解决方案1】:

    Transcation 的文档中所述,如果您想一次执行两个查询,则必须使用事务,据我所知,标准数据库操作没有其他选择

    检查下面我们正在做的你应该做类似的事情

     @Dao
     public interface NoteDao {
        @Insert
        Long insert(Note note);
    
        @@Query(“SELECT * FROM Note WHERE noteId = :id)
        Long getNote(id Long);
    
        @Transaction
        public void insertAndRetrieve(Note note):Note {
             // Anything inside this method runs in a single transaction.
    
             val id =  insert(note);
            return getNote(id);
         }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 2018-05-22
      • 2021-07-04
      • 2020-06-13
      相关资源
      最近更新 更多