Доступ и удаление строки в одном запросе в SQLite - PullRequest
0 голосов
/ 11 октября 2019

Я использую Room Database, чтобы создать базу данных для хранения информации в таблице. Я хочу получить доступ к одной записи из таблицы и удалить ту же запись без необходимости вызывать две функции.

@Query("SELECT * FROM history_packet_table ORDER BY timestamp ASC LIMIT 1")
fun get(): HistoryPacket?

@Query("DELETE FROM history_packet_table ORDER BY timestamp ASC LIMIT 1")
fun delete()

Я хочу, чтобы эти две операции выполнялись только при вызове get. Есть ли способ?

1 Ответ

2 голосов
/ 11 октября 2019

Я полагаю, что вы можете добавить к Дао следующее: -

@Transaction
fun getAndDelete() {
    get()
    delete()
}

Очевидно, что вы можете вызывать функцию по своему желанию. Однако get кажется бесполезным.

Так что вы можете захотеть что-то вроде: -

@Query("SELECT * FROM history_packet_table WHERE timestamp = (SELECT min(timestamp) FROM history_packet_table)")
fun get() :HistoryPacketTable

@Query("DELETE FROM history_packet_table WHERE timestamp = (SELECT min(timestamp) FROM history_packet_table)")
fun delete() :Int

@Transaction
fun getAndDelete() :HistoryPacketTable {
    // Anything inside this method runs in a single transaction.
    var rv: HistoryPacketTable = get()
    val rowsDeleted: Int = delete()
    if (rowsDeleted < 1) {
        rv = HistoryPacketTable();
        //....... set values of rv to indicate not deleted if needed
    }
    return rv
}
  • Обратите внимание, что LIMIT при удалении по умолчанию отключен,запросы могут быть такими же, как указано выше, это предполагает, что отметка времени уникальна, в противном случае может быть удалено несколько строк, и в этом случае Dao может быть чем-то вроде

: -

@Delete
fun delete(historyPacketTable: HistoryPacketTable) :Int

@Transaction
fun getAndDelete() :HistoryPacketTable {
    // Anything inside this method runs in a single transaction.
    var rv: HistoryPacketTable = get()
    val rowsDeleted: Int = delete(rv)
    if (rowsDeleted < 1) {
        rv = HistoryPacketTable();
        //....... set values to indicate not deleted
    }
    return rv
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...