在会议室数据库中以“喜欢”搜索加密的文本

问题描述 投票:0回答:1

在我的会议室数据库中,我有一个实体MessageDto,其中要加密的正文字段。为此,我使用如下所示的TypeConverters。

@Entity(tableName = "messages")
data class MessageDto(

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "message_id")
    var messageId: Long,

    @TypeConverters(EncryptString.Converter::class)
    @ColumnInfo(name = "body", defaultValue = "")
    var body: EncryptString

.....

您可以看到主体是EncryptString类型,它是将String转换为另一个String的类。

class EncryptString(var value: String = "") {
    class Converter {
        @TypeConverter
        fun decrypt(encrypted: String): EncryptString {
            return EncryptString(encrypted.toDecrypt())
        }

        @TypeConverter
        fun encrypt(decrypted: EncryptString): String {
            return decrypted.value.toEncrypt()
        }
    }
}

所以现在我要进行选择查询,并在messages.body字段上使用Sql的“ like”函数。

当我运行以下查询时,尽管我知道文本作为EncryptString存在于主体中,但没有任何结果

@Query("Select body from messages where body like :text")
fun searchMessage(text: String): List<EncryptString>

我做错了什么...?

kotlin android-sqlite android-room typeconverter
1个回答
0
投票

我认为您需要以以下形式更改您的Dao方法:

@Query("Select body from messages where body like :text")
fun searchMessage(text: EncryptString): List<EncryptString>

只需将输入参数类型从String更改为EncryptString

© www.soinside.com 2019 - 2024. All rights reserved.