【问题标题】:Proper Way to annotate Android Room Dao?注释Android Room Dao的正确方法?
【发布时间】:2020-09-28 12:21:47
【问题描述】:

我按照 codelab 教程进行操作,结果感到困惑。我想使用外部数据库进行测试,唯一的一个表和列(word_tableword 如codelab中提到的)工作正常。但我正在尝试使用以下 sql 信息添加我自己创建的 .db:

CREATE TABLE "product_table" (
    "id"    INTEGER NOT NULL,
    "product"   TEXT,
    "partof"    TEXT,
    PRIMARY KEY("id")
);

我不确定如何正确注释它。以下是我正在使用的代码。

WordDao.kt

@Dao
interface WordDao {

@Query("SELECT * from product_table ORDER BY id ASC")
fun getAlphabetizedId(): List<Id>

@Query("SELECT * from product_table ORDER BY word ASC")
fun getAlphabetizedWords(): LiveData<List<Word>>

@Query("SELECT * from product_table ORDER BY partof ASC")
fun getAlphabetizedPartof(): List<Partof>

Product.kt

@Entity(tableName = "eilian_table")
class Id(@PrimaryKey @ColumnInfo(name = "id") val id: String)

@Entity(tableName = "eilian_table")
class Word(@ColumnInfo(name = "word") val word: String)

@Entity(tableName = "eilian_table")
class Partof(@ColumnInfo(name = "partof") val partof: String)

获取符号和引用错误。

【问题讨论】:

    标签: android-studio kotlin android-room dao


    【解决方案1】:

    看一下the docs - 基本上Entity 代表一个表,您正在为同一个表创建三个,每个都有一个字段。这是你的 SQL:

    CREATE TABLE "product_table" (
        "id"    INTEGER NOT NULL,
        "product"   TEXT,
        "partof"    TEXT,
        PRIMARY KEY("id")
    );
    

    所以你想要这样的东西:

    @Entity(tablename = "product_table")
    data class Product(
        @PrimaryKey
        val id: Int,
        val product: String,
        @ColumnInfo(name = "partof")
        val partOf: String
    )
    

    你可以看到它基本上是如何映射到 SQL 的——你可能想让 Strings 可以为空,我把 @ColumnInfo 注释作为 Kotlin 字段名称与表中的列名(即使它不区分大小写,所以在这里实际上并不重要)。

    您需要更改查询,以便只从表中提取您想要的列

    【讨论】:

    • 好的,谢谢...嗯.. 嘿顺便说一句,我的数据库大约 14 mb,并创建了额外的 -shm 和 -wal 文件(应用程序大小加倍)。您对此有任何参考或信息吗?我好像没找到。
    • 这里有人在谈论它们:stackoverflow.com/questions/60665631/… 看起来它们基本上是 SQLite 数据库系统文件,不用担心它们!
    • 好的,明白了。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    相关资源
    最近更新 更多