Поиск зашифрованного текста с «как» в комнате базы данных - PullRequest
0 голосов
/ 16 апреля 2020

В моей базе данных комнат у меня есть сущность 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, который является классом, который превращает строку в другую строку.

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()
        }
    }
}

Итак, теперь я хочу сделать запрос на выборку и использовать функцию «like» Sql для поля messages.body.

Когда я запускаю приведенный ниже запрос, я не получаю никаких результатов, хотя знаю, что текст существует в теле как EncryptString

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

Что я делаю не так ...?

1 Ответ

0 голосов
/ 17 апреля 2020

Я думаю, вам нужно изменить ваш метод Дао в следующей форме:

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

Просто измените тип входного аргумента с String на EncryptString

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...