Bagaimana saya bisa menghapus semua entri pada tabel tertentu menggunakan Perpustakaan Persistensi Kamar? Saya perlu drop table, tetapi saya tidak dapat menemukan informasi bagaimana melakukan ini.
Hanya ketika database dimigrasi atau memuat semua entri dan menghapusnya :)
clearAllTables()
yang "menghapus semua baris dari semua tabel yang terdaftar ke database ini sebagai entitas ()." Saya memasukkan ini sebagai jawaban di bawah, tetapi saya mereproduksi di sini untuk visibilitas.Jawaban:
Anda dapat membuat metode DAO untuk melakukan ini.
sumber
@Query
itu terbatas pada hal-hal yang mengembalikan set hasil (mirip denganrawQuery()
). Sangat keren!@Delete
tidak memiliki parameter dan menghapus semua dari tabel? Saya mencoba mencari pelacak Kamar untuk mengarsipkan itu ...Ids
? Saya memang suka ini tetapi Id Tabel terus bertambah. Dalam tabel drop nyata Id juga turun mulai dari 0 lagi.Pada Kamar
1.1.0
Anda dapat menggunakan clearAllTables () yang:sumber
SELECT name FROM sqlite_master WHERE type='table'
dan kemudian secara manualDELETE FROM {TABLE}
. Belum diuji ini.Jika ingin menghapus entri dari tabel di Kamar cukup panggil fungsi ini,
Pembaruan: Dan jika Anda ingin menghapus tabel lengkap, panggil fungsi di bawah ini,
Catatan: Di sini MyModel adalah Nama Tabel.
sumber
Gunakan clearAllTables () dengan RXJava seperti di bawah ini untuk menghindari
java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
sumber
Saya memiliki masalah dengan menghapus semua metode saat menggunakan RxJava untuk menjalankan tugas ini di latar belakang. Beginilah akhirnya saya menyelesaikannya:
dan
sumber
thread {}
menggunakan RxJavaMenggabungkan apa yang dikatakan Dick Lucas dan menambahkan reset autoincremental dari postingan StackOverFlow lainnya, saya pikir ini bisa bekerja:
sumber
Untuk menggunakan Kamar tanpa penyalahgunaan
@Query
anotasi, gunakan dulu@Query
untuk memilih semua baris dan memasukkannya ke dalam daftar, misalnya:@Query("SELECT * FROM your_class_table")
Masukkan daftarnya ke dalam anotasi penghapusan, misalnya:
@Delete
sumber
Inilah cara saya melakukannya di Kotlin.
Suntikkan room db dalam aktivitas menggunakan DI (Koin).
Maka Anda cukup memanggil clearAllTables ()
private fun clearRoomDB () {GlobalScope.launch {appDB.clearAllTables () preferensi.put (PreferenceConstants.IS_UPLOADCATEGORIES_SAVED_TO_DB, false) preferensi.put (PreferensiConstants.IS_MEMBERHANDBOOK_SAVED_TO_DB, false}}
sumber