当前位置: 首页 > 知识库问答 >
问题:

房间数据库-如何返回整个行后插入?

阎经武
2023-03-14

我有一个插入行的查询

@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执行第二次查询?

在postgreql我会做这样的事情:

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

不知道如何使用房间图书馆

共有1个答案

闽念
2023-03-14

正如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);
     }
 }
 类似资料:
  • 在viewmodel类中获取数据方法

  • 我正在尝试使用RxJava在后台线程上使用我的RoomDatabase。 我的DAO类: 我的实体类(为简洁起见省略了getter和setter方法): 最后,这里是我的MeasurementDatabase类: 在我的片段中,我试图在单击菜单项后插入背景线程: 最终测量数据库appDb= 我收到一个错误,说: 我的RxJava代码中缺少了什么,没有将进程放在后台线程上?

  • 我在项目开发阶段。因此,我现在基本上不需要迁移。我以前有第一个表,第二个表是新添加的表。我已经预装了db。下面是使用的代码。 我还在AndroidManifest中给出了。xml。我不想使用,它也会清除我的预打包数据库。 我在emulator(API级别29)中卸载了该应用程序并运行了该应用程序。我得到了这个错误。 我不明白为什么重新安装会导致这个问题。有人能让我知道我做错了什么吗?

  • 我尝试在Android房间中附加数据库,如下所示:如何从Android房间中的多个数据库中进行选择(如何附加数据库),但在构建项目时出现错误:错误:查询有问题:[SQLITE\u错误]SQL错误或缺少数据库(没有这样的表:database.table)错误 当我添加@SkipQuery验证时,错误发生了变化:错误:不确定如何将游标转换为此方法的返回类型。 当我从查询中删除“myDatabase.”

  • 错误:查询有问题:[SQLITE_ERROR]SQL错误或缺少数据库(没有这样的表:任务) 显示了这个错误,我怎么可能修复它? 我正在学习这个教程

  • 并且我发现了基于数据库版本4的可能场景的迁移varargs。 我的问题是,假设我使用的是db v1的Room,当我的应用程序到达db v10时,我将不得不编写多少迁移方法? 在sqlite中,我们在中获得已安装应用程序的当前db版本,我们只需通过开关大小写而不使用break语句,以便满足所有db升级。