Android Room-Datenbanktransaktionen

8

Mit der neuen Raumdatenbank in Android habe ich eine Anforderung, wo zwei sequenzielle Operationen ausgeführt werden müssen:

%Vor%

Wenn ich das ausführe, sehe ich (beim Untersuchen der db), dass einige Zeilen fehlen - ich nehme an, dass sie nach dem Einfügen gelöscht werden. nämlich. Die erste Operation läuft parallel zur zweiten.

Wenn ich einen Transaktionsblock wie diesen verwende, ist alles in Ordnung - die erste Operation scheint abgeschlossen zu sein, bevor die zweite ausgeführt wird:

%Vor%

Es ist auch in Ordnung, wenn ich stattdessen dazwischen schlafen lasse:

%Vor%

Es scheint nicht viel Dokumentation für Room zu geben, und ich fragte mich, ob ich den Transaktionsblock wie oben verwenden sollte, wenn ich sequenzielle Operationen ausführen möchte, oder gibt es einen besseren Weg dazu.

>

BEARBEITEN : Nachdem @CommonsWare darauf hingewiesen hat, sind @Query asynchron, während @Insert und @Delete synchron sind. In Anbetracht dessen würde ich eine Abfrage erhalten, die Zeilen als async löscht:

%Vor%

Nach der Build-Ausgabe bekomme ich Deletion methods must either return void or return int (the number of deleted rows) , wenn ich versuche, den Rückgabetyp in eine Flowable einzubinden.

    
rajath 23.06.2017, 02:00
quelle

2 Antworten

6

Wie in der Dokumentation zu Transaktion angegeben, können Sie Folgendes tun:

%Vor%     
guness 12.10.2017 14:24
quelle
5

Wie @CommonsWare heraushebt, sind @Query asynchron, während @Insert, @Delete, @Update synchron sind.

Wenn Sie mehrere Abfragen in einer einzigen Transaktion ausführen möchten, bietet Room auch eine Methode wie unten erwähnt.

%Vor%

Ich hoffe, dass dies Ihr Problem lösen wird.

    
Pinakin 08.09.2017 04:21
quelle