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

如何在android room和rxjava 2中插入数据并获取id作为out参数?

百里胜泫
2023-03-14

插入查询

@Insert(onConflict = OnConflictStrategy.REPLACE)
long insertProduct(Product product);   //product id is auto generated 

查看模型

public Completable insertProduct(final String productName) {
    return new CompletableFromAction(() -> {
        Product newProduct = new Product();
        newProduct.setProductName(productName);
        mProductDataSource.insertOrUpdateProduct(newProduct);
    });
}

在我调用上述函数的活动中,我使用了CompositeDisposable。

CompositeDisposable mDisposable = new CompositeDisposable();

 mDisposable.add(mViewModel.insertProduct(productName))
      .subscribeOn(Schedulers.io())
      .observeOn(AndroidSchedulers.mainThread())
      .subscribe(() ->{} ,throwable -> Log.e(TAG, "Error msg", throwable))); 

我实施的方式不对吗?

共有1个答案

方夜洛
2023-03-14

根据文件。如果@Insert方法只接收到1个参数,它可以返回long,这是插入项的新rowId。如果参数是数组或集合,则应返回long[]或List。由于只插入一项,因此该方法将只返回一个rowID。

那么,试试这个

Single.fromCallable(new Callable<Long>() {
        @Override
        public Long call() throws Exception {
           return productDao.insertProduct(new Product()));
        }
    })
    .subscribe(id -> {

    } ,throwable -> Log.e(TAG, "Error msg", throwable)))

您可以使用可观察的或可能的。但我认为单条更合适,因为在您的情况下,id是自动生成的,插入应该始终完成。

 类似资料:
  • 问题内容: 我正在尝试将oracle过程调用的out参数强制转换为对象。它不起作用,因为-就我所知- 我需要定义一个映射,告诉该方法如何投射它。如果地图是空的或未正确填充,则默认为STRUCT类型的Objekt-在我的情况下这是错误的。 我建立了一个示例,该示例应说明该问题: 由于地图错误,我无法使用以下方式: 我应该如何填写地图? 编辑1 oracle数据库中的条目无法更改。我只被允许使用它们。

  • 问题内容: 如何在JDBC中获取插入ID? 问题答案: 如果它是自动生成的密钥,那么你可以使用它。你需要Statement使用与用于相同的名称进行调用INSERT。首先,你需要创建用于通知JDBC驱动程序以返回键的语句。 这是一个基本示例: 请注意,你是否依赖JDBC驱动程序。当前,大多数最新版本都可以使用,但是如果我没错,Oracle JDBC驱动程序仍然有些麻烦。MySQL和DB2已经支持它很

  • 我想用Java中的JDBC在数据库中插入一条记录(在我的例子中是Microsoft SQL Server)。同时,我想获得insert ID。如何使用JDBC API实现这一点?

  • 我有一个MySQL数据表,详细信息如下: 它正在工作,只是我正在尝试在插入数据后从数据库中获取id号。我该怎么做?

  • 我正在Android中使用以下rxjava依赖项: 我正在尝试创建一个方法,它将把观察者作为参数。我有一些问题,我想是因为这是rxjava2,所以东西更新了,我有点困惑。 让我向你展示我想要完成的事情: 那么如何保存一次性,这样我们就可以退订了呢?

  • 问题内容: 我想在Java中使用JDBC在数据库(本例中为Microsoft SQL Server)中进行记录。同时,我想获取插入ID。如何使用JDBC API实现此目的? 问题答案: 如果它是自动生成的密钥,那么你可以使用它。你需要使用与用于相同的名称进行调用。首先,你需要创建用于通知JDBC驱动程序以返回键的语句。 这是一个基本示例: 请注意,你是否依赖JDBC驱动程序。当前,大多数最新版本都