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

Kotlin-使用Persistence Room:runtime lib从文件室数据库返回新插入的id

孔永年
2023-03-14

我试图插入用户记录在房间数据库使用静态编程语言和它的完美工作。

现在我想返回新插入的记录id,以检查记录是否成功插入到房间数据库中。

但是,当我在insert方法中应用长返回类型并运行代码时,我得到以下错误。

错误:方法返回long,但它应该返回以下内容之一:space,long[],java.lang.Long[],java.util.List

public abstract long insertUser(@org.jetbrains.annotations.NotNull()

我正在使用这个库。

实现“android.arch.persistence.room:runtime:1.0.0”

kapt "android.arch.persistence.room:compiler:1.0.0"

这是我的插入查询。

@Insert
fun insertUser(vararg userRegistrationEntity: UserRegistrationEntity):Long;

这是我的addAsyncTask,我在房间数据库中插入了一条记录

private fun userRegistration(userRegistrationEntity: UserRegistrationEntity) {
        addAsyncTask(appDatabase!!).execute(userRegistrationEntity) 
    }

    private class addAsyncTask constructor(private val appDatabase: AppDatabase) : AsyncTask<UserRegistrationEntity, Void, Long>() {
        override fun doInBackground(vararg params: UserRegistrationEntity): Long? {
           // val a = appDatabase.userRegistrationDao().addUser(params[0]);
            val newReturnId = appDatabase.userRegistrationDao().insertUser(params[0]);
            return newReturnId
        }

        override fun onPostExecute(result: Long?) {
            super.onPostExecute(result)
            Log.d("value", result.toString()) 
        }
    }

共有2个答案

司空海荣
2023-03-14

根据这里的文档

使用@Insert注释进行注释的方法可以返回

long for single insert operation
long[] or Long[] or List<Long> for multiple insert operations
void if you don't care about the inserted id(s)
年高洁
2023-03-14

如果要插入多个实体,则只能在数组或列表中获取它们的ID,例如:

@Insert
fun insertUsers(vararg userRegistrationEntities: UserRegistrationEntity): List<Long>

如果一次插入一个实体,则可以将其ID作为Long

@Insert
fun insertUser(userRegistrationEntity: UserRegistrationEntity): Long
 类似资料:
  • 我是android新手,这是我第一次在应用程序中使用room。未执行插入操作或未创建数据库或任何其他错误。 我不知道我做错了什么,所以我需要你的帮助。 此程序正在运行,但未显示任何结果。屏幕上什么都没有显示。 这是我的代码-请让我知道此代码中的错误以及我应该如何更正它。 汽车细节。JAVA 卡多。爪哇- CarListDatabase。JAVA CarRepository.java 公共无效get

  • 我在我的项目中集成了Firebase实时数据库。当活动打开时,我检查用户是否已经在数据库中检查,为此,我从调用方法。检查下面的代码。 问题:当数据插入firebase并在中回调/触发器时,如何更新/接收数据?

  • 我想使用房间数据库,但在构建应用程序时出现以下错误: 执行组织时出错。喷气式飞机。科特林。格拉德尔。内部的KaptExecution公司 和一些这样的错误: 错误:不确定如何将游标转换为此方法的返回类型(java.util.ArrayList 我将数据库与这些类一起使用: 书签实体: 书签数据库: 书签DAO: 我为房间添加此依赖项: 并在构建顶部添加应用插件:“kotlin kapt”。grad

  • 问题内容: 我需要将CSV文件中的约180万行插入MySQL数据库。(只有一张桌子) 当前使用Java解析文件并插入每一行。 可以想象,这需要花费几个小时才能运行。(粗略地10) 我之所以没有将其从文件直接传送到db中,是因为在将数据添加到数据库之前必须对其进行操作。 此过程需要由那里的IT经理来运行。因此,我将其设置为一个不错的批处理文件,以便他们在将新的csv文件放入正确的位置后运行。因此,我

  • 我正在使用并尝试插入具有以下函数的mysql数据库: 最后一个带有的控制台输出显示正确,但即使在等待之后也没有发生任何事情 我猜这是函数的异步部分,但同时还能做什么呢? 使用Knex时,是否有标准的方法创建条目? 感谢您的回复!

  • 当我在php中使用MSSQL读取一个包含很长内容的字段时,我得到一个错误 警告:mssql_query()[function.mssql查询]: Unicode仅排序规则中的Unicode数据或ntext数据不能使用DB-库(如ISQL)或ODBC版本3.7或更早版本发送到客户端 我在网上搜索并找到了解决这个问题的方法,发现我需要转换结果以获得可读文本。 然而,我遇到的另一个问题是,文本数据在40