android - 如何使用 Android Room 在 DAO 类中正确获取表名

标签 android kotlin android-room

我想知道在 Android Room 查询中使用表名时如何避免硬编码。我在 Kotlin 中开发,但老实说,在这个问题上,Java 或 Kotlin 无关紧要。

让我们看看简单的类:

DAO 接口(interface):

@Dao
interface UserDAO {

    @Query("SELECT * FROM USER")
    fun getAll(): List<User>
}

实体类:

@Entity(tableName = "USER")
class User {
}

可以看到表名“USER”是硬编码在UserDAO中的@Query中的。如何避免这种情况?如何引用@Entity参数tableName

我想把所有的名字都放在一个地方。

最佳答案

您可以在任何 Util 类中创建一个常量,并且可以像这样在 Entity 和 Dao 类中引用该变量:-

假设在 MainActivity 中有

    companion object {
        const val TABLE_NAME: String="Cheese"
    }

实体类

@Entity(tableName = MainActivity.TABLE_NAME)

Dao类将是

@Query("SELECT * FROM "+MainActivity.TABLE_NAME)

注意:-这是避免硬编码命名的常用方法,您可以从实体类中获取表名(需要探索):)。

关于android - 如何使用 Android Room 在 DAO 类中正确获取表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49109866/

相关文章:

java - 扫描仪有问题

android - 以编程方式将音频歌曲路由到蓝牙?

spring-boot - 批量运行 Spring-Boot + Camel 测试失败

android - 无法解析settings_container

android - 使用 kotlin.UByte 作为房间实体不起作用

android - 如何在不阻塞 UI 线程的情况下用来自 Room 的数据填充微调器

android - 无法使用 Superpowered 库为 arm64-v8a 创建 so 文件

Android Studio - 如何在代码编辑器中使垂直线指南变暗?

lambda - kotlin html builder 如何在幕后工作?

java - 当输入查询只是数据的一部分时,如何使用 Room 从数据库中获取数据?